* plan: UI improvements to improve LLM usage via SimpleX
* core, ui: types for chat layout
* core, ui: settings for alternative terminal-like chat layout for managing LLMs or other service bots
* plan: message priority
* fixes
* query plan
* update plans
* remove silent messages plan
* rename migrations
* implement layout
* amend
* fix
* fix
* fix
* improve
* time on the right, sender name in blue
* no avatar in direct chats
* better previews
* update, fixes
* update
* time gap
* changes
* ui: terminal layout line heights, gaps and time placement
* ui: simplify terminal meta layout, correct its docs and tests
* ui: right-to-left emoji edge in terminal rows, time placement tests
* android, desktop: raise Kotlin compiler memory to 4 GB
* ui: terminal captions as follow-up text, classic event separators
* ui: terminal media edge and overlay time, plan decisions
* ui: simplify terminal row separation, correct doc line references
* ui: keep the media time inside terminal rows, restore caption conditions
* ui: terminal heading capitals at large font scales, idle live message time
* ui: rename the classic voice-with-text flag, correct the meta copy docs
* ui: smaller terminal layout diff, sender gap and meta names
* ui: terminal row as tall as the media time
* docs: remove the chat layout section from the bots readme
* docs: shorten the terminal layout section of the chat view
* core: address settings API as on master, /auto_accept reads the stored layout
* ui: smaller terminal headings
* ui: classic sender rows and avatar rule as on master
* ui: classic reply quote text colour as on master
* ios: keep the chat layout setting with other UI settings
* ui: go-to button at the end of terminal rows, no gutter in direct chats
* ui: forwarded arrow on the header line of terminal rows, above the time
* ui: forwarded arrow centred above the time line of terminal rows
* ios: terminal chat layout, chosen per app, profile and chat
* ios: event time reserve of three spaces, app layout picker as Kotlin
* ios: spec and plan of the terminal chat layout
* ios: classic message text at 87% in dark themes, as terminal rows
* ios: terminal gaps scaled by the body size, 17/16 of Kotlin values
* ios: terminal quote sender at 13.5pt, thumbnail at the item end
* ios: product docs of the terminal layout, plans updated for iOS
* ios: chat scenes rendered to PNG by a unit test in the simulator CI
* ios: snapshots rendered by the smoke test script, workflow unchanged
* ios: terminal names at 13.5 x 17/16 pt, as the gaps
* ios: Markdown views at the 87% message colour in dark themes
* ios: terminal quote thumbnail 12pt after the quote text or the bar
* ios: terminal rule-only message widened by a wider quote or header
* ios: member avatars scaled with the text size, as in the chat list
* ios: snapshot rows at their own height, as list cells, so text wraps
* ios: member avatars back at 34pt, for the snapshot before scaling
* ios: member avatars scaled with the text size, as in the chat list
* ui: terminal quote thumbnail 12dp after the quote text or the bar
* ios: classic group bubble width follows the scaled member avatar
* ci: ios-sim README describes the snapshots rendered after the smoke test
* ios: scratch, padding variants for the I7 and I8 renders, to revert
* ios: revert the scratch padding variants after their renders
* ui: contrast of the voice message button in terminal rows
* ios: scratch, spacing variants and list margins to render, to revert
* ios: revert the scratch spacing variants after their renders
* ios: snapshots at a fixed date, in UTC and the en_US locale
* ios: snapshots drawn as 8-bit sRGB without alpha
* ci: compare iOS snapshots with the references in the repository
* ci: record and check iOS snapshot references on GitHub's runner
* ios: scratch, list margins on the remaining screens, to revert
* ios: revert the scratch list margins after their measurement
* ci: snapshot scripts executable, as the other CI scripts
* ios: scratch, voice circle variants in light themes, to revert
* ios: revert the scratch voice circle variants
* ios: one 12pt padding at the edges and after avatars in terminal rows
* ios: classic group sender name on the bubble edge
* ui: one 12dp padding at the edges and after avatars in terminal rows
* ios: one heading scale in both chat layouts
* ios: snapshot references of the chat scenes
* docs: leave the headings and classic lines of the plan to ep/classic-bubbles
* ios: declare terminal layout functions inside types
* ios: keep layout constants at file scope
* ios: keep file-scope functions, move only extension members into types
* ios: snapshot tests record row heights at first layout and the appearance layout switch
* ios: appearance preview follows the chat layout setting at once
* ios: snapshot test measures first-layout rows by SwiftUI and by cells
* ios: chat rows measured at the chat width when they first appear
* ios: snapshot test checks that chat rows keep their first height after a reload
* ios, ci: references of terminal and classic chat scenes, dark message text
* ios: message text at 95% in dark themes
* ios, ci: references with message text at 95% in dark themes
* ios: media in terminal rows end at the time's right inset
* ios, ci: references with terminal media at the time's right inset
---------
Co-authored-by: Evgeny Poberezkin <evgeny@poberezkin.com>
* ios: fix XCode 16 regressions (tap not working on files, quotes, images, voice messages, etc.), open link previews on tap
* fix voice recording
* fix video, accepting calls from chat, preference toggles in chat
* WIP message and meta
* handle links in attributed strings
* custom attribute for links to prevent race conditions with default tap handler
* ios: ensure legibility of elements rendered over media
* reduce diff
* match meta padding
* material play background
* remove circlebadge
* progress circle
* meta color modes
* refactor
* conditional space
* fix
* fix2
* fix3
* revert video buttons
---------
Co-authored-by: Evgeny Poberezkin <evgeny@poberezkin.com>
* ios: add chat message tail and roundness settings
* cleanup
* minor
* rename
* date separator
* revert max roundness to pills
* increase default roundness to 1
* minor
* out of bounds tails, style date separator
* formatting
* hardcode tail growth
* revert
* different shape (WIP)
* tail
* rename
* square
* only show tail for the last message
* remove func
* capture less
* variable tail height
* export localizations
---------
Co-authored-by: Evgeny Poberezkin <evgeny@poberezkin.com>
* ios: block members (WIP)
* CIBlocked, blocking api
* show item as blocked
* show blocked and merge multiple deleted items
* update block icons
* split sent and received deleted to two categories
* merge chat feature items, refactor CIMergedRange
* merge feature items, two profile images and names on merged items
* ensure range is withing chat items range
* merge group events
* fix/refactor
* make group member changes observable
* exclude some group events from merging
* fix states not updating and other fixes
* load list of members when tapping profile
* refactor
* fix incorrect merging of sent/received marked deleted
* fix incorrect expand/hide on single moderated items without content
* load members list when opening member via item
* comments
* fix member counting in case of name collision
* ui: types and stubs to encrypt local files
* ios: encrypt automatically received images in local storage
* encrypt sent images, marked to be received via NSE
* ios: encrypt sent and received local voice files
* encrypt sent and received local files
* fix NSE
* remove comment
* decrypt files in background thread
* core: add chat items to indicate decryption failures due to ratchets being out of sync
* show ratchet errors in chat items, show all integrity errors
* show decryption errors, tests
* ios: chat items, remove item for duplicate messages
* android: decryption errors chat items
* eol