* refactor data of `EditTagGroupView`
* lower case tags before saving because API is case-insensitive
* fix: "add new tag" `TextField` is not focused after adding the first tag (on both macOS and iOS)
* perf: improve symbol search performance
* improve layout and animation of symbol search
* fix: sort tags and remove duplicate tags
* fix: crash when open timeline for an empty tag group
* fix: revert concurrency code because performance issue at 1d3f271 is a false alarm
* add warning labels to help the users
* fix: state `tagGroup`
* fix: selecting symbol logic and warning labels
* refactor `EditTagGroupView.body`
* refactor warning labels
* Fix theme
* Move to its own folder
---------
Co-authored-by: Thomas Ricouard <ricouard77@gmail.com>
The pending-button can now be shown in any corner the user prefers. This is
accomplished by allowing the user to move the counter left in addition to the
already present option to move it down. Fixes#1637
Signed-off-by: Paul Schuetz <pa.schuetz@web.de>
* - *WIP* Explore tab: Tap on tab to scroll to top.
* - Explore tab: Tap tab to scroll to top.
* - Explore: Tap tab again to focus on search bar.
- Explore: Set `.defaultMinListRowHeight` so scroll to view doesn't occupy more than 1pt height in grouped style list.
- Explore: Add padding to get Explore list view to look the same.
* - Explore: Minor adjust to padding.
* - Messages: Add tap tab to scroll to top.
* - Notifications: Add tap tab to scroll to top.
* - Profile: Add tap tab to scroll to top.
* Add `ScrollToView` that can be used across all views.
* Move scroll-to-top constants to ScrollToView.
* Format
---------
Co-authored-by: Thomas Ricouard <ricouard77@gmail.com>
* Automatically remove spaces in server names
If a server name includes a space (which can happen if the string is pasted /
autocompleted), this space is removed, which results in the app not crashing.
Fixes#1599
Signed-off-by: Paul Schuetz <pa.schuetz@web.de>
* Format
---------
Signed-off-by: Paul Schuetz <pa.schuetz@web.de>
Co-authored-by: Thomas Ricouard <ricouard77@gmail.com>
* Improve accessibility of StatusPollView
Previously, this view did not provide the proper context to indicate that it represented a poll.
Now, we’ve added
- A container that will stay “Active poll” or “Poll results” when the cursor first hits one of the options;
- A prefix to say “Option X of Y” before each option;
- A Selected trait on the selected option(s), if present
- Consolidating and adding an `.updatesFrequently` trait to the footer view with the countdown.
* Add poll description in StatusRowView combinedAccessibilityLabel
This largely duplicates the logic in `StatusPollView`.
* Improve accessibility of media attachments
Previously, the media attachments without alt text would not show up in the consolidated `StatusRowView`, nor would they be meaningfully explained on the status detail screen.
Now, they are presented with their attachment type.
* Change accessibilityRepresentation of AppAcountsSelectorView
* Change Notifications tab title view accessibility representation to Menu
Previously it would present as a button
* Hide layout `Rectangle`s from accessibility
* Consolidate `StatusRowDetailView` accessibility representation
* Improve readability of Poll accessibility label
* Ensure poll options don’t present as interactive when the poll is finished
* Improve accessibility of StatusRowCardView
Previously, it would present as four separate elements, including an image without a description, all interactive, none with an interactive trait.
Now, it presents as a single element with the `.link` trait
* Improve accessibility of StatusRowHeaderView
Previously, it had no traits and no actions except inherited ones.
Now it presents as a button, triggering its primary action.
It also has custom actions corresponding to its context menu
* Avoid applying the StatusRowView custom actions to every view when contained
* Provide context for the application name
* Add pauses to StatusRowView combinedAccessibilityLabel
* Hide `TimelineView.scrollToTopView` from accessibility
* Set appropriate font style on Notification header
After the change the Text needed a `.headline` style to match the prior appearance.
* Fix bug in accessibilityRepresentation of TimelineView nav bar title
Previously, it would not display the proper label for .remoteLocal filter options.
* Ensure that pop-up button nav bar titles are interactive
* Ensure TextView responds to Environment.sizeCategory
This resolves#1309
* Fix button
---------
Co-authored-by: Thomas Ricouard <ricouard77@gmail.com>
* Improve StatusRowView accessibility actions
Previously, there was no way to interact with links and hashtags.
Now, these are added to the Actions rotor
* Hide `topPaddingView`s from accessibility
* Fix accessible header rendering in non-filterable TimelineViews
Previously, all navigation title views were assumed to be popup buttons.
Now, we only change the representation for timelines that are filterable.
* Combine tagHeaderView text elements
Previously, these were two separate items
* Prefer shorter Quote action label
* Improve accessibility of StatusEmbeddedView
Previously, this element would be three different ones, and include all the actions on the `StatusRowView` proper. Now, it presents as one element with no actions.
* Add haptics to StatusRowView accessibility actions
* Improve accessibility of ConversationsListRow
This commit adds:
- A combined representation of the component views
- “Unread” as the first part of the label (if this is the case)
- All relevant actions as custom actions
- Reply as magic tap
* Remove StatusRowView accessibilityActions if viewModel.showActions is false
* Hide media attachments from accessibility if the view is not focused
* Combine NotificationRowView accessibility elements; add user actions
Previously, there was no real way to interact with these notifications.
Now, the notifications that show the actions row have the appropriate StatusRowView-derived actions, and new followers notifications have more actions that let you see each user’s profile.
* Prefer @Environment’s `accessibilityEnabled` over `isVoiceOverRunning`
This way we can cater for Voice Control, Full Keyboard Access and Switch Control as well.
---------
Co-authored-by: Thomas Ricouard <ricouard77@gmail.com>
* Refine Profile tab VoiceOver order to prioritise user information
Previously, VoiceOver user would have to traverse through header image, “follows you”, and the profile image before getting to the display name of the user.
Now, this element is the first element after the navigation bar.
* Add accessibility label to Timeline Compose post button
Previously, this button was using the SF symbol fallback label.
Now, it has a localized equivalent in addition to two other options: “New”, and “Create”
* Change accessible representation of Timeline nav bar menu
Previously, this would present as a static text.
Now, it has the header trait. In addition, by changing the representation, VoiceOver will read it out as “Home, Pop-up button, Header”, indicating that it opens a menu.
* Add accessibilityHint to Timeline tab Accounts selector
* Add accessibilityLabel and hint to PendingStatusesObserver
Previously, this button would have a label equal to the count of unread posts. Now, it states “X new posts” with the hint “Scrolls the timeline”
* Add image prefectch to the timeline
* Use preview url for post with multiple attachements
* Add image resize
* Prefetch link cards
---------
Co-authored-by: Thomas Ricouard <ricouard77@gmail.com>
* Trying something with caching boosts
* Use an actual cache for caching
* Persist cache to documents folder
* Stray debugging variable
* Unpublish seen variable in the ViewModel
* Settings for deduplicating boosts.
* Changes from review / merge conflicts