kernelkind (5):
TMP: use new egui-nav to fix scroll offset issues
add `scroll_offset` to `NoteAction::Note`
add `ThreadNote::set_scroll_offset`
set scroll offset when routing to thread
appease clippy
Introduces an `AnimationMode` enum with `Reactive`, `Continuous`, and
`NoAnimation` variants to allow fine-grained control over GIF playback
across the UI. This supports performance optimizations and accessibility
features, such as disabling animations when requested.
- Plumbs AnimationMode through image rendering paths
- Replaces hardcoded gif frame logic with reusable `process_gif_frame`
- Supports customizable FPS in Continuous mode
- Enables global animation opt-out via `NoteOptions::NoAnimations`
- Applies mode-specific logic in profile pictures, posts, media carousels, and viewer
Animation behavior by context
-----------------------------
- Profile pictures: Reactive (render only on interaction/activity)
- PostView: NoAnimation if disabled in NoteOptions, else Continuous (uncapped)
- Media carousels: NoAnimation or Continuous (capped at 24fps)
- Viewer/gallery: Always Continuous (full animation)
In the future, we can customize these by power settings.
Signed-off-by: William Casarin <jb55@jb55.com>
What's new
==========
- New notifications indiciator dot on toolbar
- Fixed mentions/tagging
- Gave dave a new swarm look
- Persist some more settings
- Allow sorting thread replies newest first in options
- Show full created date format on selected notes
- Show client name on selected notes
- Higher quality media
- Increase media viewer transition animation
- Fix some ui glitches when replying
- Fix gpu crash on adrendo devices (some samsung galaxy tablets)
Fernando López Guevara (14):
feat(note): show full created date format on selected notes
feat(notedeck): add cross-platform URI opener
feat(settings): allow sorting thread replies newest first
feat(settings): persist settings to storage
feat(settings): show note full date
fix(media): add spacing
fix(note-content): avoid empty text blocks
fix(settings): use localization
refactor(settings): add settings sections methods
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
Update crates/notedeck/src/persist/settings_handler.rs
Terry Yiu (2):
Import Spanish translations
Fix localization issues and export strings for translation
William Casarin (31):
add NotedeckOptions and feature flags, add notebook feature
android: fix build
chrome: remove duplication in app setup
columns: clean up flags, refactor content rendering
columns: fix double reference
dave: switch to use standard vertex/index buffers
evolve dave into a swarm
init notebook
lint: fix format issue
make clippy happy
media: less blurry media
mediaviewer: decrease transition anim from 500ms to 300ms
note/ui: fix reply line when replying in narrow mode
note: small doc fix
note: turn off full date view for previews
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
perf: a few micro optimizations
post: set client tag to Damus Android on android
refactor: collapse client label settings; drop CLI/settings toggles
remove explicit loop continue
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 width instabilities because of spacing_mut
ui/note: slightly more spacing between blocks
ui: keep original design on non-narrow
kernelkind (12):
TMP: update egui for better TextInputState handling
add `NotesFreshness` to `TimelineTab`
chrome: method to find whether there are unseen notifications
extract notifications filter to own method
fix scroll regression
insert space after mention selection
mention-picker: re-add spacing from inner_margin
mentions: don't lose focus after select mention
paint unseen indicator
rename `SearchResultsView` => `MentionPickerView`
set fresh from `TimelineCache`
use unseen notification indicator
Signed-off-by: William Casarin <jb55@jb55.com>
The "top vs bottom" client label setting was cluttering the UI and
codebase with toggles that added little value. This consolidates client
label handling into one option, removes unused CLI/settings knobs, and
makes NoteView’s API consistent and fluent. Result: fewer knobs, less
branching, and a clearer, more predictable UI.
Now client labels are only shown in one place: selected notes.
- Drop `--show-client` arg in notedeck and `--show-note-client=top|bottom`
args in notedeck_columns
- Remove `NotedeckOptions::ShowClient` and related CLI parsing
- Delete `ShowSourceClientOption` enum, settings UI, and
`SettingsAction::SetShowSourceClient`
- Collapse `NoteOptions::{ClientNameTop, ClientNameBottom}` into a single
`NoteOptions::ClientName`
- Add `NoteOptions::{Framed, UnreadIndicator}`
- Move “framed” and unread indicator into flags (no more ad‑hoc bools)
- Add new NoteView builder methods: `.client_name()`, `.frame()`,
`.unread_indicator()`, and `.selected_style()`
- CLI flags for showing client labels have been removed
- `ClientNameTop`/`ClientNameBottom` replaced with `ClientName`
- API using `framed` or `show_unread_indicator` booleans must now use
the new flag setters
Signed-off-by: William Casarin <jb55@jb55.com>
kernelkind (6):
extract notifications filter to own method
add `NotesFreshness` to `TimelineTab`
set fresh from `TimelineCache`
chrome: method to find whether there are unseen notifications
paint unseen indicator
use unseen notification indicator
Changelog-Added: Add notification dot on toolbar