Skip to content

Releases: Augani/adabraka-ui

v0.3.3 - Editor UTF-8 Fix

18 Feb 03:20

Choose a tag to compare

What's Changed

Bug Fix

  • Editor: fix rope byte/char offset mismatch — All rope insert/remove operations now correctly convert byte offsets to char indices via rope.byte_to_char(). This fixes cursor drift and incorrect text placement in files containing multi-byte UTF-8 characters.

Documentation

  • Updated CHANGELOG, README, and docs site for v0.3.1–v0.3.3
  • Removed stale files (certs, prototype images, old shiori subdir)

Previous Patches

v0.3.2 — Suppress all compiler warnings across charts and components (zero-warning build)

v0.3.1 — Fix editor cursor positioning with horizontal scroll offset; fix UTF-8 backspace/delete handling

Full Changelog: v0.3.0...v0.3.3

v0.3.0 - crates.io Publishing & GPUI Fork Enhancements

06 Feb 00:31

Choose a tag to compare

Highlights

  • Published to crates.io -- All 12 adabraka-gpui ecosystem crates + adabraka-ui are now on crates.io. Just cargo add adabraka-ui to get started.
  • GPUI Fork Enhancements -- Inset shadows, letter spacing, squircle corners, text shadows, and animation cancellation built into adabraka-gpui.
  • 85+ Components -- New Form builder, DataGrid, SortableList, InfiniteScroll, and Animation Builder.
  • Comprehensive Animation System -- 30+ easings, spring physics, gestures, exit animations, ripple effects, and scroll physics.

New Components

  • Form - Declarative form builder with validation, field groups, and submit handling
  • DataGrid - Spreadsheet-style grid with inline editing, sorting, and column resizing
  • SortableList - Drag-to-reorder list with smooth animations
  • InfiniteScroll - Automatic loading of paginated data on scroll
  • Animation Builder - Preset animations, keyframes, stagger, transitions

GPUI Fork Features (adabraka-gpui)

  • BoxShadow.inset - Inset shadows across Metal, WGSL, HLSL shader backends
  • TextStyle.letter_spacing - With tracking_tight(), tracking_wide() convenience methods
  • with_cancellable_animation() - Interruptible animations via AnimationHandle
  • continuous_corners on Styled - iOS-style superellipse (squircle) corners
  • TextShadow - With text_shadow_sm/md/lg() presets

Animation & Polish

  • Exit animations for all overlay components (Dialog, Toast, Popover, Sheet, etc.)
  • Input shake on validation failure
  • Ripple effect on Button and IconButton
  • Spring physics, gestures, content transitions, responsive utilities
  • ScrollPhysics with momentum scrolling
  • Smooth animated scroll-to

DX Improvements

  • GPUI re-exports via gpui_ext.rs
  • StyledExt trait with .center(), .stack(), .row(), .glass(), .elevated(), .ring()
  • Spacing, duration, z-index tokens on all 18 themes
  • Expanded prelude

Breaking Changes

  • GPUI dependency changed from gpui to adabraka-gpui (our fork with enhancements)
  • Update your Cargo.toml: gpui = { package = "adabraka-gpui", version = "0.3" }

Installation

[dependencies]
adabraka-ui = "0.3"
gpui = { package = "adabraka-gpui", version = "0.3" }

Full changelog: https://github.com/Augani/adabraka-ui/blob/main/CHANGELOG.md

v0.2.4: Major Component Expansion - 80+ Components

29 Jan 10:15

Choose a tag to compare

v0.2.4: Major Component Expansion

This release brings 25+ new components and significant improvements, bringing the total to 80+ components.

New Components

Data Visualization

  • Chart - Declarative chart component with composable series
  • LineChart - Line charts with multiple series support
  • BarChart - Vertical and horizontal bar charts
  • PieChart - Pie and donut charts
  • Sparkline - Compact inline charts

Media

  • AudioPlayer - Full-featured audio player with rodio backend
  • VideoPlayer - Video player component
  • ImageViewer - Zoomable image viewer with pan support
  • Carousel - Image/content carousel with navigation

Input Components

  • RangeSlider - Dual-handle range selection
  • Dropdown - Customizable dropdown menus
  • TimePicker - Time selection with keyboard support
  • TagInput - Tag/chip input with autocomplete
  • NumberInput - Numeric input with increment/decrement
  • OTPInput - One-time password input
  • MentionInput - @mention input with suggestions
  • FileUpload - Drag & drop file upload
  • HotkeyInput - Keyboard shortcut capture
  • InlineEdit - Click-to-edit text

Layout & Navigation

  • SplitPane - Resizable split panels
  • Timeline - Vertical timeline with alternating layout
  • Stepper - Multi-step wizard navigation
  • FileTree - File browser tree view

Feedback & Display

  • Spinner - Loading spinners
  • Alert - Alert banners with variants
  • EmptyState - Empty state placeholders
  • NotificationCenter - Toast notification system
  • Countdown - Countdown timer
  • Rating - Star rating component
  • AvatarGroup - Stacked avatar display

Improvements

  • Chart tooltips now work on hover (no click required)
  • Timeline component with proper alternating layout
  • SplitPane drag handlers improved for better tracking
  • Audio player with real playback via rodio
  • VideoPlayer API simplified for easy integration
  • Fixed vertical bar chart rendering

Installation

[dependencies]
adabraka-ui = "0.2.4"

Full Changelog: v0.2.3...v0.2.4

v0.2.3: Slider Improvements with Vertical Orientation

13 Nov 13:07

Choose a tag to compare

What's New in v0.2.3

✨ Added

  • Vertical slider orientation support
    • New SliderAxis enum with Horizontal and Vertical variants
    • .vertical() and .horizontal() builder methods
    • Separate rendering logic for horizontal and vertical orientations
    • Vertical sliders grow from bottom to top (0% at bottom, 100% at top)
    • Adaptive thumb shape: horizontal oval for horizontal sliders, vertical oval for vertical sliders
    • update_from_position_vertical() method for proper vertical drag handling

🐛 Fixed

  • Slider thumb vertical centering
    • Container height now matches thumb height for proper alignment
    • Thumb positioned at top: 0 instead of calculated offset
    • Track perfectly centered within container using flex layout
    • Thumb now sits centered on the track line instead of above it

🎨 Improved

  • Slider component architecture with separate render_horizontal() and render_vertical() methods
  • Cleaner positioning logic using container dimensions matching thumb dimensions
  • Better visual consistency across all slider sizes (Sm, Md, Lg)

📚 Examples

  • Updated slider_styled_demo.rs with 10 comprehensive examples
    • 7 horizontal slider variations demonstrating sizes, styling, and features
    • 3 vertical slider examples showcasing the new orientation support
    • All examples fully interactive with drag support and onChange handlers

Installation

Add to your `Cargo.toml`:

```toml
[dependencies]
adabraka-ui = "0.2.3"
```

Or install via cargo:

```bash
cargo add adabraka-ui
```

Crates.io: https://crates.io/crates/adabraka-ui/0.2.3
Documentation: https://docs.rs/adabraka-ui/0.2.3
Full Changelog: v0.2.2...v0.2.3

v0.2.2: Keyboard Navigation and Password Input Improvements

28 Oct 18:02

Choose a tag to compare

adabraka-ui v0.2.2 Release Notes

Release Date: October 28, 2025

Overview

This release focuses on improving form usability and developer experience with keyboard navigation enhancements, password input fixes, and comprehensive project documentation.

What's New

Keyboard Navigation

We've added full Tab/Shift-Tab navigation support for form inputs, making it easier to create accessible forms:

// Tab navigation works automatically with proper FocusHandle configuration
Input::new(&email_input)
    .placeholder("Email")

Input::new(&password_input)
    .placeholder("Password")
    .password(true)

// Press Tab to move to next input, Shift-Tab to go back

Implementation Details:

  • FocusHandle configured with .tab_index(0).tab_stop(true) for proper focus management
  • Window-level navigation using window.focus_next() and window.focus_prev()
  • Emits InputEvent::Tab and InputEvent::ShiftTab for custom handling

Password Input Eye Icon Toggle

The password input eye icon now works correctly, allowing users to toggle password visibility:

Input::new(&password_input)
    .password(true)  // Enables the eye icon toggle
    .placeholder("Enter password")

Features:

  • Icon toggles between "eye" (hidden) and "eye-off" (visible)
  • Password masking switches between bullets (••••) and actual text
  • Immediate visual feedback with proper state management
  • Clean, intuitive UX aligned with modern web standards

Comprehensive ROADMAP

Added detailed ROADMAP.md with complete component inventory:

  • 90+ Components organized by category (Display, Forms, Navigation, Overlays, etc.)
  • Status indicators (✅ Complete, 🔄 In Progress, ❌ Todo, ⚠️ Partial)
  • Phase-based development plan with desktop integration features
  • Prioritized quick wins and improvements

Improvements

Code Quality

  • Removed 13 unnecessary inline comments across 6 files
  • Cleaner, more production-ready codebase
  • Files improved: color_picker.rs, input_state.rs, input.rs, text.rs, lib.rs, transitions.rs

New Examples

  • password_test.rs - Demonstrates password toggle functionality with clear instructions

Bug Fixes

  • Fixed password input eye icon not toggling correctly
  • Fixed password masking not switching between hidden/visible states
  • Fixed state reading to use dynamic input_state.masked value for immediate updates

Technical Details

Password Toggle Implementation

The password toggle now properly reads state dynamically and triggers UI refresh:

// Dynamic state reading
let is_masked = input_state.masked;

// Toggle on click with immediate refresh
state.update(cx, |state, cx| {
    state.masked = !state.masked;
    cx.notify();
});
window.refresh();

Keyboard Navigation Architecture

Built on GPUI's focus system with proper FocusHandle configuration:

// FocusHandle is the source of truth for tab properties
.track_focus(&self.state.read(cx).focus_handle(cx).tab_index(0).tab_stop(true))

// Tab handlers in InputState
pub fn tab(&mut self, _: &Tab, window: &mut Window, cx: &mut Context<Self>) {
    window.focus_next();
    cx.emit(InputEvent::Tab);
}

Migration Guide

No breaking changes in this release. All existing code will continue to work without modifications.

To use the new keyboard navigation features, ensure your inputs are rendered in the proper order and they will automatically support Tab/Shift-Tab navigation.

Installation

[dependencies]
adabraka-ui = "0.2.2"

What's Next

Check out our ROADMAP.md for upcoming features including:

  • File upload component
  • Virtualized list improvements
  • Multi-window support
  • System tray integration
  • And much more!

Contributors

Thank you to everyone who contributed to this release!

Resources


For questions or feedback, please open an issue on GitHub.

v0.2.1 - New Components: ColorPicker, DatePicker, and Combobox

23 Oct 08:08

Choose a tag to compare

🎉 What's New

Three New Production-Ready Components

ColorPicker 🎨

  • Full-featured color picker with HSL, RGB, and HEX mode switching
  • Recent colors history (stores last 10 colors)
  • Custom color swatches support
  • Optional alpha/opacity slider
  • Copy to clipboard (HEX format)
  • Popover-based clean UI

DatePicker 📅

  • Single date and date range selection modes
  • Visual range highlighting with colored backgrounds
  • Disabled dates with greyed-out styling
  • Weekend disabling helper method
  • Auto-close popover after selection
  • Multiple date formats (ISO, US, EU, custom)
  • Locale support for internationalization

Combobox 🔍

  • Single and multi-select modes
  • Real-time search/filter with immediate updates
  • Keyboard navigation (arrow keys, Enter, Escape)
  • Custom display and search functions
  • Clear selection button
  • Badge display for multi-select items
  • Empty state handling

✨ Improvements

  • Updated component count from 70+ to 73+
  • Zero compiler warnings - completely clean build
  • Immediate UI updates - no mouse movement required
  • Enhanced Calendar component with DateRange support and visual styling
  • Comprehensive documentation with code examples for all new components
  • Updated GitHub Pages and README with full feature lists

🛠️ Technical Details

  • Proper GPUI Entity<T> state management pattern
  • DismissEvent emission for proper popover closing
  • cx.notify() calls for immediate UI updates
  • Professional visual styling with theme integration
  • Full keyboard navigation support

📚 Examples

Try the new components:

cargo run --example color_picker_demo
cargo run --example date_picker_demo
cargo run --example combobox_demo

📦 Installation

[dependencies]
adabraka-ui = "0.2.1"
gpui = "0.2.0"

Full Changelog: v0.2.0...v0.2.1

v0.2.0: 100% Styled Trait Coverage - Major Feature Release

23 Oct 04:44

Choose a tag to compare

Release Notes - v0.2.0

🎉 Major Feature Release: 100% Styled Trait Coverage!

We're excited to announce adabraka-ui v0.2.0, a major feature release that brings complete styling customization to every single component in the library!


🌟 Highlights

100% Styled Trait Coverage - ALL 54 Components!

Every user-facing component in adabraka-ui now implements the Styled trait, giving you complete control over styling using GPUI's powerful styling API.

What this means for you:

  • Apply any GPUI styling method to any component
  • Custom backgrounds: .bg(rgb(0x3b82f6))
  • Custom borders: .border_2().border_color(rgb(0xef4444))
  • Custom padding: .p_4(), .px_6(), .py_2()
  • Custom border radius: .rounded_lg(), .rounded_xl()
  • Shadow effects: .shadow_sm(), .shadow_lg()
  • Width/height: .w_full(), .h(px(200.0))
  • And hundreds more styling methods!

Components with Styled Trait

Components (14): Button, Input, Checkbox, IconButton, Label, Radio, Toggle, Textarea, Avatar, Progress, Slider, Separator, SearchInput, Select

Display (6): Card, Badge, Accordion, Table, DataTable, Collapsible

Navigation (9): Menu, Tabs, Toolbar, Sidebar, Breadcrumbs, NavigationMenu, StatusBar, Tree, AppMenu

Overlays (11): Dialog, Sheet, AlertDialog, Toast, BottomSheet, CommandPalette, ContextMenu, HoverCard, Popover, PopoverMenu, Tooltip

Advanced (9): TextField, Pagination, ToggleGroup, KeyboardShortcuts, Calendar, Resizable, Editor, Draggable, DropZone


🆕 What's New

Icon System Enhancements

Icon Phase 1:

  • Consolidated IconSource module across all components (DRY principle)
  • Removed duplicate IconSource definitions
  • Improved path detection with separator-first logic
  • Added comprehensive unit tests

Icon Phase 2:

  • IconSize enum with named sizes: XSmall, Small, Medium, Large, Custom(Pixels)
  • Rotation support using GPUI's Transformation API
  • Styled trait for Icon component - full customization support
Icon::new("search")
    .size(IconSize::Large)
    .rotate(Radians::from_degrees(90.0))
    .p_2()
    .bg(rgb(0x89b4fa))
    .rounded_md()

Component Enhancements

Text Component - Fixed Decorations!

  • Italic now actually works using HighlightStyle API
  • Strikethrough now actually works with customizable thickness
  • ✅ All decorations can be combined
Text::new("Deprecated warning")
    .italic()
    .strikethrough()
    .underline()
    .color(red())

Button Component

  • Improved API with better ID parameter handling
  • Fixed compilation across 21 example files
  • Styled trait allows complete customization

Checkbox Component

  • Replaced emoji icons (✓ and −) with customizable Icon components
  • Users can now choose their own check and indeterminate icons
Checkbox::new("check")
    .checked_icon("check-circle")
    .indeterminate_icon("dash")

Calendar Component - Full i18n!

  • Added CalendarLocale struct for internationalization
  • Built-in locales: English, French, Spanish, German, Portuguese, Italian
  • Support for custom locales
Calendar::new(date)
    .locale(CalendarLocale::french())
    .on_month_change(|new_date, window, cx| { /* ... */ })

54 New Styled Demos

Created comprehensive demonstration examples for every component:

  • button_styled_demo.rs - 7 button customization examples
  • input_styled_demo.rs - 12 input styling variations
  • data_table_styled_demo.rs - 6 styled tables with virtual scrolling
  • drag_drop_styled_demo.rs - Interactive task board with styling
  • And 50 more demos!

Each demo shows real, working examples of how to customize components using the Styled trait.


💥 Breaking Changes

Icon Component Returns

Before: Non-clickable icons returned Div
After: Non-clickable icons return AnyElement (performance improvement)

Impact: This is a performance optimization. In most cases, you won't notice any difference. If you were explicitly typing the return value, you may need to update to AnyElement.


🐛 Fixes

  • Fixed Editor component .when() pattern to .map() for style application
  • Fixed DropZone naming conflict (renamed internal style field to drop_style)
  • Fixed Button API usage across 21 example files
  • Fixed various component compilation errors
  • Fixed sidebar_demo and menu_demo import paths
  • Fixed select_styled_demo unused variable warnings

🎨 Design Philosophy

shadcn/ui Alignment

This release fully embraces the shadcn philosophy:

"Good defaults that users can completely override"

Before v0.2.0: Components had good defaults, but limited customization options.

After v0.2.0: Components have great defaults AND users have 100% control via Styled trait!

Example of complete control:

Button::new("custom", "Click Me")
    // Override ALL default styles
    .bg(rgb(0x8b5cf6))           // Custom background
    .p_8()                        // Custom padding
    .rounded(px(16.0))            // Custom radius
    .border_2()                   // Custom border
    .border_color(rgb(0xa78bfa))  // Custom border color
    .shadow_lg()                  // Custom shadow
    .w_full()                     // Custom width
    .text_size(px(18.0))          // Custom text size

Documentation: See SHADCN_DESIGN_PHILOSOPHY.md for complete details.


📦 Improvements

Code Quality

  • Removed 3,274 unnecessary inline comments
  • Production-ready code with clean implementations
  • Consistent Styled trait API across all 54 components
  • Better developer experience

Performance

  • Icon component optimization (removed wrapper div for non-clickable icons)
  • Efficient style application using .refine() pattern
  • No extra overhead from Styled trait

🚀 Migration Guide

From v0.1.1 to v0.2.0

Good news: Most code will work without changes!

Using the New Styled Trait

The Styled trait is additive - you can use it when you need custom styling, but all your existing code continues to work.

Before (still works):

Button::new("btn", "Click")
    .variant(ButtonVariant::Primary)
    .size(ButtonSize::Large)

After (now also possible):

Button::new("btn", "Click")
    .variant(ButtonVariant::Primary)  // Use built-in variant
    .size(ButtonSize::Large)           // Use built-in size
    .bg(rgb(0x custom))                // ADD custom background
    .rounded_xl()                      // ADD custom radius
    .shadow_lg()                       // ADD shadow effect

Icon Component Changes

If you were explicitly typing Icon return values:

// Before
let icon: Div = Icon::new("search");  // ❌ No longer works

// After
let icon = Icon::new("search");       // ✅ Let Rust infer the type
// OR
let icon: AnyElement = Icon::new("search").into_any_element();  // ✅ Explicit typing

📚 Resources


🙏 Acknowledgments

This release represents a massive improvement to the adabraka-ui library:

  • 54 components now fully customizable
  • 54 new demo examples showing real use cases
  • 100% alignment with shadcn design philosophy
  • Zero compromises on performance or developer experience

Thank you to everyone using adabraka-ui and providing feedback! 🎉


🔮 What's Next

While we've achieved 100% Styled trait coverage, there's always more to improve:

  • Additional component variants
  • More built-in themes
  • Performance optimizations
  • Accessibility enhancements
  • More comprehensive documentation

Stay tuned for v0.3.0!


Upgrade today:

[dependencies]
adabraka-ui = "0.2.0"

Happy coding! 🚀

v0.1.1: Icon Bundle Optimization & Example Fixes

22 Oct 15:46
6e621a4

Choose a tag to compare

🎉 Release v0.1.1

This release focuses on bundle size optimization and fixing all examples.

🔥 Breaking Changes

  • Icons are no longer bundled with the library (reduces package size by 95%)
  • Users must now provide their own icon assets
  • Added configurable icon path system with set_icon_base_path()

🐛 Fixed

  • Fixed 20+ examples with incorrect API usage
  • Fixed scroll module imports → scrollable
  • Fixed VStack compatibility with scrollable_vertical
  • Fixed Menu and MenuItem API usage
  • Fixed toolbar click handlers to use on_mouse_down
  • Removed 4 broken/missing examples

✨ Improved

  • Removed unnecessary inline comments (cleaner, production-ready code)
  • Added comprehensive icon setup documentation in README
  • All 53 working examples now compile successfully (100% success rate!)
  • Updated examples with proper AssetSource configuration

📦 Package Size

  • Before: 3,431 files
  • After: 157 files
  • Reduction: 95%

📚 Documentation

Users now need to:

  1. Download their preferred icon set (Lucide, Heroicons, etc.)
  2. Configure icon path with set_icon_base_path("path/to/icons")
  3. Set up GPUI's AssetSource (see README for complete example)

🔗 Resources

See CHANGELOG.md for full details.

adabraka-ui v0.1.0 🎉

21 Oct 20:15

Choose a tag to compare

adabraka-ui v0.1.0 🎉

We're excited to announce the first public release of adabraka-ui - a comprehensive, professional UI component library for GPUI!

🌟 What is adabraka-ui?

adabraka-ui is a complete UI toolkit for building beautiful desktop applications with Rust and GPUI. Inspired by shadcn/ui, it provides 70+ polished, accessible components with a modern design system.

✨ Highlights

🎨 Complete UI System

  • 70+ Components covering all your UI needs
  • Built-in Theme System with light/dark modes and semantic color tokens
  • Professional Animations with cubic-bezier easing and spring physics
  • Typography System with semantic text variants
  • Lucide Icons integration

📱 Real-World Examples

Check out these apps built with adabraka-ui:

  • Desktop Music Player - Beautiful offline music player with smooth animations
  • Task Manager - Used to track the development of this library!
  • 50+ Component Demos - Learn from comprehensive examples

🧩 Component Categories

Input & Forms

  • Button, IconButton, Input, Textarea
  • Checkbox, Toggle, Radio, Select
  • SearchInput, Editor (with syntax highlighting)

Navigation

  • Sidebar, MenuBar, Tabs, Breadcrumbs
  • Tree, Toolbar, StatusBar, Command Palette

Data Display

  • Table, DataTable (virtual scrolling)
  • Card, Badge, Accordion, Progress

Overlays

  • Dialog, Popover, Tooltip, Toast
  • Alert, Context Menu

Layout

  • VStack, HStack, Grid
  • Scrollable, Resizable Panels

🎯 Key Features

  • Type-Safe - Leverages Rust's type system for compile-time guarantees
  • Accessible - Full keyboard navigation, ARIA labels, screen reader support
  • High Performance - Optimized for GPUI's retained-mode rendering
  • Well Documented - Comprehensive examples and API documentation
  • Builder Pattern - Ergonomic, chainable API design

📦 Installation

Note: Currently requires Rust nightly due to GPUI dependencies.

[dependencies]
adabraka-ui = "0.1.0"
gpui = "0.2.0"
cargo +nightly build

🚀 Quick Start

use adabraka_ui::prelude::*;
use gpui::*;

fn main() {
    Application::new().run(|cx| {
        adabraka_ui::init(cx);
        install_theme(cx, Theme::dark());

        cx.open_window(
            WindowOptions {
                titlebar: Some(TitlebarOptions {
                    title: Some("My App".into()),
                    ..Default::default()
                }),
                ..Default::default()
            },
            |_, cx| cx.new(|_| MyApp::new()),
        ).unwrap();
    });
}

🌐 Resources

📚 Documentation

Visit our beautiful documentation site featuring:

  • Real app showcases
  • Installation guide
  • Component examples with code
  • Comprehensive API reference

🤝 Contributing

We welcome contributions! Check out our Contributing Guide to get started.

🙏 Acknowledgments

Special thanks to:

💖 Support

If you find adabraka-ui helpful, consider buying me a coffee!

📄 License

MIT License - see LICENSE for details.


Built with ❤️ using GPUI and inspired by shadcn/ui