William Casarin (217): Fix text wrapping issues Fullscreen MediaViewer refactor Implement soft keyboard visibility on Android Initial tab bar Revert "Unify sub for contacts in accounts & timeline" Revert "android: fix remaining keyboard issues" Revert "feat(note-actionbar): refine icons" Revert "fix(columns): render wide notes on narrow screen" Revert "relay: make multicast a desired relay" add NotedeckOptions and feature flags, add notebook feature add input context menu helper andriod: add app icons android/input: add copy/paste context to post input android: add initial ci android: arboard clipboard support android: default app to columns android: fix back button android: fix build android: fix crash on mobile android: fix dark/light mode and folding screen crash android: fix remaining keyboard issues android: hide chrome sidebar by default android: hide new post button when navigating android: hover post button when narrow android: reapply keyboard changes android: remove special load arguments anim: animate on compose button hide anim: animate show/hide of compose button anim: reduce gif fps args: add --locale option args: parse hashtag columns from cli args: switch to oot_bitset for arg flags battery: disable render every 100ms chrome/readme: mention signer chrome: add virtual keyboard ui chrome: collapsible side panel chrome: extract method to function chrome: extract more non-methods chrome: greatly improve soft-keyboard visibility & layout handling chrome: hook up toolbar actions chrome: make toolbar smaller chrome: remove dev log chrome: remove duplication in app setup clippy fixes clippy: fix large enum. clippy: fix lint errors clippy: fix lint related to iterator clippy: quick lint fix clndash: add readme clndash: channels ui clndash: configurable host clndash: dont forget CLNDASH_ID clndash: fix invoice order, return more stuff clndash: include listpeerchannel errors clndash: initial peer channel listing clndash: invoice loading clndash: readme clndash: reorganize clndash: specify you need --clndash clndash: summary cards clndash: tweak links in readme clndash: tweak readme clndash: zap rendering columns/add: move home and notifications to top columns/decks: add home and notifications for new accounts columns/nav: ocd nevernest columns/profile: only mutate profile state after navigating columns/profile: rename process -> process_profile_action columns/timeline: include column index in timeline view_id columns: clean up flags, refactor content rendering columns: enable toolbar scroll to top columns: fix double reference columns: switch to bitflag app options dave: add chrome toggle button dave: initial android fixes dave: small cleanup dave: switch to logical time dave: switch to use standard vertex/index buffers db: fix bad query bug in author-kind queries debug: add memory debug window debug: add repaint causes debug tool debug: add startup query debug log debug: fix memory debug builds debug: fix memory debugger default logs deps: switch to damus-io egui-nav enostr: remove raw event type evolve dave into a swarm fix android-activity crash on unhandled app cmds fix missing zap button fix note response regression fix one missing home string fix target sdk force oled with --mobile flag gif: disable continuous gif rendering gitignore: ds_store gitignore: ignore logcat gitignore: include junk so that `git clean` can handle it gitignore: remove cache hashtag: improve sanitization function i18n: always have en-XA available i18n: disable bidi for tests i18n: disable broken tests for now i18n: make localization context non-global images: always resize large images init notebook input: halve long press input duration introduce HybridFilter lint: fix format issue lockfile: fixup log: less verbose unknown id logging log: make some routing logs into debug logs make clippy happy media/trust: always show if its yourself media/viewer: click anywhere to close media/viewer: fix broken culling media/viewer: fix flicker on escape-close media/viewer: fullscreen transition animations media/viewer: handle click-to-close interactions media/viewer: provide image-click provenance media/viewer: slower animation media: change is_narrow logic to is_scaled media: less blurry media mediaviewer: decrease transition anim from 500ms to 300ms multi_subscriber: switch to debug statements nav: nav to accounts view for actions that require key nip10: switch to NoteReply instead of handrolled logic nix: add $ANDROID_JAR helper to shell nix: emulator nostrdb: bump to v0.7.0 nostrdb: update for windows and memleak fixes note/action: add ScrollInfo note/options: made wide the default note/options: remove redundant has function note/options: simplify flag logic note/ui: fix reply line when replying in narrow mode note: cleanup wide/standard implementation note: small doc fix note: turn off full date view for previews note_follows: remove unneeded derefence notebook: draw edges and arrows notebook: fix heights of nodes notebook: fix node sizes notebook: move ui code into its own file notebook: remove redundant closure notedeck app: add clndash onboarding: restore demo deck perf: a few micro optimizations post: set client tag to Damus Android on android profile: fetch new metadata when visiting profiles profile: fix crash with ProfileState defaults readme: fix link readme: tweaks readme: we're in beta status refactor: collapse client label settings; drop CLI/settings toggles relay: make multicast a desired relay remove explicit loop continue remove hjkl bindings rename Contacts to Home reply: add some space after reply box ripgrep: add ignore file for ftl files router: fix router selection scroll: simple fix settings: fix route to relay thread: enable selectable text in threads thread: move comment to the correct place thread: selected thread notes should be... selectable threads: disable wide in threads timeline: show media on universe timeline toolbar: process actions tweak follow pack design tweak minSdk ui/carousel: refactor to use indices ui/column: include pfp in back response ui/column: remove move/remove column buttons on narrow ui/mention: fix weird mention text size ui/narrow: restore padding ui/note: fix another reply_desc wrapping issue ui/note: fix extra padding in block renderer ui/note: fix indented actionbar in non-wide mode ui/note: fix reply description item spacing ui/note: fix weird ... placement regression ui/note: fix width instabilities because of spacing_mut ui/note: make buttons larger ui/note: refactor reply line into a function ui/note: show full link type in unhandled mentions ui/note: simplify weird hack and make note of it ui/note: slightly more spacing between blocks ui/note: small refactor to use returns instead of break ui/profile: fix dubious profile editing ui/replydesc: quick TextSegment cleanup/optimize ui/settings: fix small double clone nit ui/wallet: small refactor to use return instead of break ui: add AnimationMode to control GIF rendering behavior ui: don't auto-repaint that often ui: fix broken note previews ui: keep original design on non-narrow ui: remove show_pointer ui: wrap reply description universe: add full tabs update lock wallet: fix nwc copy/paste wallet: remove unused flag in note context kernelkind (200): Clarify & enforce selected-only behavior in `Accounts` subscription Revert "tmp: temporary AccountCache" TMP: temporary author for trusted pks list TMP: update egui for better TextInputState handling TMP: update egui-nav TMP: use new egui-nav to fix scroll offset issues TMP: use new egui-nav with popup Unify sub for contacts in accounts & timeline `AccountData`: decouple query from constructor `ImagePulseTint` -> `PulseAlpha` accounts: make fallback pk non optional accounts: move accounts to own module accounts: move mute stuff to own module accounts: move relay stuff to own file add ChromePanelAction::Profile & use for pfp add Nip51SetCache helper methods add UI for (un)follow add `AccountCache` add `Accounts` to `NoteContext` add `Contacts` add `CustomZapView` add `DragSwitch` add `NoteId::from_bech` method add `NoteId` hashbrown `Equivalent` impl add `NotesFreshness` to `TimelineTab` add `NotesOpenResult` add `RelayDefaults` add `SearchType` add `SingletonRouter` add `TexturesCache` add `ThreadNote::set_scroll_offset` add `ThreadSubs` for managing local & remote subscriptions add `TimelineCache` helper methods add `TimelineUnits` add `route_uses_frame` add `scroll_id` for all views with vertical scroll add `scroll_offset` to `NoteAction::Note` add `trust_media_from_pk2` method add actions for follow/unfollow add blurhash dependency add constructor for `AccountData` add flags to `ScaledTexture` add hashbrown add impl for `ScaledTextureFlags::RESPECT_MAX_DIMS` add info statements add muted helper add new Accounts button to chrome sidebar add nip51 set caching structs add onboarding 'manager' add onboarding related state to app add onboarding view add one shot error message add overlay conception to `Router` add overlay to `RouterAction` add pfp bounding box to `NoteResponse` add preview flag to `NoteAction` add reactions kind to notifications filter add search improvements add select_by_route add threads impl add toolbar defaults add toolbar icons to `notedeck_ui` add toolbar related logic add unread note indicator option to `NoteView` add virtual list to `Onboarding` allow body on unknown profile allow removal of Damoose account appease clippy bugfix: properly sub to new selected acc after removal of selected bugfix: txn failed bugfix: unsubscribe all decks when log out account bugfix: unsubscribe from timelines on deck deletion bump nostrdb chrome: method to find whether there are unseen notifications clippy: allow collapsible match construct NoteBuilder from existing note copy toolbar rendering to `notedeck_ui` decouple `RelayView` UI from state mutation display name should wrap don't expose mutable access to `UserAccount` don't show zap button if no wallet enforce scroll_id for `ThreadView` enostr: add equivalence between Pubkey & bytes expose `AccountCache::falback` expose `AccountSubs` expose indexmap to notedeck extract a pub `render_media` from image_carousel extract notifications filter to own method fix contact list bug fix duplicate ReactionUnit for multiple kth indices fix log messages fix reaction target bug fix scroll regression fix: sometimes most recent contacts list wasn't used get scroll id for `Route` hotfix: can login again images: make `MediaCache` hold `MediaCacheType` images: make promise payload optional to take easily images: move fetch to fn implement blurring increment sub count when necessary insert space after mention selection integrate new threads conception integrate onboarding introduce & use `JobPool` introduce JobsCache introduce blur introduce failing test for reaction duplication bug make `Contacts::is_following` use bytes instead of `Pubkey` make `TimelineCache::notes` private make `TimelineCache::timelines` private make `UserAccount` cloneable make `Widget` impl `ProfilePic` mutably make compose button animate horiz rather than vert make search icon more customizable make selected accounts non optional make since optimize accept Option<&NoteRef> instead of notes make styled button toggleable mention-picker: re-add spacing from inner_margin mentions: don't lose focus after select mention method to get current default zap amount migrate accounts to be referenced through pks instead of indices migrate to check following through `Contacts::is_following` move (de)serialization of wallets & accounts to own structs move `AcountData` into `UserAccount` move `FALLBACK_PUBKEY` move `HybridSet` to own file move `modify_advertised_relays` into accounts/relay.rs move `styled_button_toggleable` to notedeck_ui move `update_relay_configuration` to account/relay.rs move aux code to bottom move polling responsibility to `AccountData` move select account logic to own method move switching related actions from notedeck -> columns nav: move action processing to own method nav: move process nav response to own method nip 51 set widget note media: only show full screen when loaded note media: unnest full screen media note: account for mutes in the notifications dot note: refactor to use action composition & reduce nesting note: remove unnecessary derive macros from `NoteAction` notedeck_ui: move carousel to `note/media.rs` only deserialize first route in each column paint unseen indicator pass `NoteAction` by value instead of reference post: unnest prop `Onboarding` as mut prop `UnknownIds` for initial timeline propagate `Images` to actionbar propagate `JobsCache` refactor scrolling for post, reply & quote views remove `MuteFun` prop remove commented out code... remove duplicate `UnknownIds` initialization remove unnecessary FilterState::NeedsRemote filter remove unnecessary method rename `SearchResultsView` => `MentionPickerView` render follow pack by index from virtual list replace `HybridSet` with `NoteUnits` replace `MultiSubscriber` with `TimelineSub` send contact list event on account creation send kind 3 event set fresh from `TimelineCache` set scroll offset when routing to thread set variable for scroll offset split `AccountStorage` into reader & writer stop error log spam thread UI threads: fix other replies not rendering in presence of one muted tmp: temporary AccountCache tmp: upgrade `egui-nav` to use `ReturnType` track all timeline related subscriptions in `TimelineSub` ui: add `hline_with_width` ui: add like icon ui: add rendering for `NoteUnit`s ui: reactions closer approximation of iOS design ui: remove unnecessary reverse unknownids: use pk bytes unknowns: use unowned noteid instead of owned upgrade `TimelineOpenResult` to hold new pubkeys too use `AccountSubs` for timeline contact sub use `Contacts` in `AccountData` use `CustomZapView` use `DragSwitch` in `Column` use `DragSwitch` to allow dragging anywhere in navigation use `NwcError` instead of nwc::Error use `TimelineUnits` instead of `Vec` use indexmap use popup sheet for `CustomZapView` use router action use saturating sub use the onboarding follow pack curator pubkey use toolbar in columns rather than chrome use unseen notification indicator wallet: remove unnecessary mut Fernando López Guevara (44): Update crates/notedeck/src/persist/settings_handler.rs feat(app_images): add module to manage static app image assets feat(column): add tooltip on remove column button feat(full-screen-media): add image URL in top bar and navigation dots in bottom bar feat(full-screen-media): add swipe navigation feat(hashtag-column): handle new hashtag on Enter key press feat(image_carousel): navigate media with arrow left/right keys feat(mobile): improve layout and behavior on narrow screens feat(note): created at show full date format feat(note): show full created date format on selected notes feat(note-actionbar): refine icons feat(note-view): show note client feat(notedeck): add cross-platform URI opener feat(profile): add tooltip on copy npub feat(profile-view): split nip05 when is_narrow feat(profile-view): split profile info entries when is_narrow feat(settings): add settings view feat(settings): allow sorting thread replies newest first feat(settings): persist settings to storage feat(settings): show note full date fix(add_column): add vertical scroll fix(chrome): add hover text and pointer cursor to sidebar elements fix(columns): prevent crash when switching to account with no columns fix(columns): render wide notes on narrow screen fix(compose-button): apply icon_color to compose button edge circles & add hover text fix(content): handle case where notes are not loaded fix(deck): show column picker when deck has no columns fix(media): add spacing fix(media): edge-to-edge image display on narrow screen fix(media): use ScaledTexture fix(note-content): avoid empty text blocks fix(note_actionbar): add invisible label to stabilize section width ¯\_(ツ)_/¯ fix(profile): split always fix(search): make input background gray in light mode fix(settings): use localization fix: skip blurring for user's own images hashtag-column: allow multiple hashtags media: handle upload on android refactor(settings): add settings sections methods refactor: use Margin:ZERO settings: use timed serializer, handle zoom properly, use custom text style for note body font size, added font size slider, added preview note update i18n comments for source client options Terry Yiu (19): Add Fluent-based localization manager and add script to export source strings for translations Add French, German, Simplified Chinese, and Traditional Chinese translations Add Japanese and Portuguese (Portugal) languages Add Portuguese (Brazil) language and translations Add Spanish (Latin America and Spain) translations Add Thai translations Add human-readable names to locales in settings Add localization documentation to notedeck DEVELOPER.md Clean up time_ago_since, add tests, and internationalize strings Export strings for translation Fix export_source_strings.py to adjust for tr! and tr_plural! macro signature changes Fix localization issues and export strings for translation Import Spanish translations Import translations Internationalize ShowNoteClientOptions labels Internationalize user-facing strings and export them for translations Remove unused strings from translation files Update Chinese, French, and German translations Jakub Gladysz (2): ui: add follow button Do not crash on unknown arg alltheseas (2): Update README.md with deepwiki badge (#875) Update README.md with reference plans to support building on notedeck valkuros@gmail.com (1): Changed line 683 from Persisted to temp per Minor bug #888