Files
notedeck/crates/notedeck_columns
William Casarin ccc188c0ae chrome: greatly improve soft-keyboard visibility & layout handling
This reworks how we detect and respond to the on-screen keyboard so inputs
don’t get buried and the UI doesn’t “jump”.

- Add SoftKeyboardAnim + AnimState FSM for smooth IME open/close animation
- Centralize logic in keyboard_visibility() with clear edge states
- Animate keyboard height via animate_value_with_time instead of layer
  transforms
- Add ChromeOptions::KeyboardVisibility flag when focused input would be
  occluded
- Add SidebarOptions::Compact to collapse sidebar while typing
- Hide mobile toolbar when keyboard is open (columns app)
- Use .stick_to_bottom(true) in reply + profile editors; remove old spacer hack
- Virtual keyboard toggle moved to F1 in Debug builds
- Introduce SoftKeyboardContext::platform(ctx) helper
- Cleanup dead/commented code and wire up soft_kb_anim_state in Chrome

Result: inputs stay visible, open/close is smooth, and UI adjusts gracefully
when typing.

Signed-off-by: William Casarin <jb55@jb55.com>
2025-08-20 15:28:28 -07:00
..
2025-07-17 13:54:43 -07:00
2025-04-21 13:26:02 -07:00
2025-04-21 13:26:02 -07:00

NoteDeck Columns

A TweetDeck-style multi-column interface for Nostr built with Rust and egui.

Overview

NoteDeck Columns is a specialized UI component of the NoteDeck Nostr client that provides a TweetDeck-inspired multi-column layout for browsing Nostr content. It allows users to create customizable "decks" with multiple columns, each showing different types of Nostr content (home timeline, notifications, hashtags, profiles, etc.).

Features

  • Multi-column layout: View different Nostr content types side by side
  • Customizable decks: Create and customize multiple decks for different use cases
  • Column types:
    • Universe (global feed)
    • Contact lists (follows)
    • Profiles
    • Notifications
    • Hashtags
    • Threads
    • Search results
    • Algorithmic feeds (e.g., last notes per pubkey)
  • Interactions: Post, reply, quote, and zap notes
  • Media support: View and upload images
  • Multiple accounts: Switch between multiple Nostr accounts

Getting Started

NoteDeck Columns is part of the larger NoteDeck ecosystem. To use it:

  1. Clone the NoteDeck repository
  2. Build the project with Cargo
  3. Run NoteDeck and select the Columns interface

See the DEVELOPER.md file for detailed setup instructions.

Architecture

NoteDeck Columns is built using:

  • Rust: For performance and type safety
  • egui: For the UI rendering
  • nostrdb: For Nostr data storage and retrieval
  • enostr: For Nostr protocol communication

The codebase is organized around the concept of timelines, views, and decks, with a column-based UI architecture.

Contributing

Contributions are welcome! Please see DEVELOPER.md for information on how to set up your development environment and contribute to the project.

License

NoteDeck Columns is licensed under the GPL v3.