* Fix: improve the 'end of feed' detection condition
* Fix the feeds link on mobile in the empty state
* Align the following empty state better on web
* Dont autofocus the search input in the search tab
* Fix the error boundary render
* Add 'end of feed' CTA to following feed
* Reduce the default feeds to discover now that we have feed-selection during onboarding
* Fix case where loading spinner fails to stop rendering in bottom of feed
* Fix: dont show loading spinner at footer of feed when refreshing
* Fix: dont fire reminders during onboarding
* Optimize adding feeds and update to mirror the api behaviors more closely
* Use the lock in preferences to avoid clobbering in-flight updates
* Refresh the feed after onboarding to ensure content is visible
* Remove the now-incorrect comment
* Tune copy
- Replaced `useWebMediaQueries().isDesktop` with `isWeb` in `DesktopWebTextLink` component to fix inconsistent behavior due to media query changes.
- `isWeb` doesn't rely on media queries, offering stable judgement and avoiding fluctuation when adjusting the browser window.
* Add link warning modal when URLs do not match their text
* Simplify the misleading link case for clarity
* Fix typecheck
* fix dark mode
* Give a stronger visual indication of the root domain in the link warning
* More rigorous URL mismatch logic
* Remove debug
---------
Co-authored-by: Ansh Nanda <anshnanda10@gmail.com>
* Refactor `useOnMainScroll` function to use responsive device detection
- Replace static `isDesktopWeb` with `useWebMediaQueries` hook to enable dynamic device type detection.
- Create `useDeviceLimits` hook to dynamically determine `DY_LIMIT_UP` and `DY_LIMIT_DOWN` based on device type.
- Update dependency arrays for the `useCallback` hooks to include new dynamic variables.
* Refactor styles to be responsive to device type
- Create `useStyles` hook that generates styles object based on device type detected from `useWebMediaQueries`.
- Replace static styles object with dynamic styles object generated from `useStyles` hook in components.
- This allows `paddingLeft` values for 'ul' and 'ol' styles to adapt to device type dynamically.
- This allows `maxWidth` values for 'metaItem'' styles to adapt to device type dynamically.
* Remove `isDesktopWeb` in favor of `useWebMediaQueries().isDesktop`
* Refactor `SplashScreen` component for responsive design
* Revision based on review results
* Fix isNative check
---------
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
* quick switch menu
* Some small tweaks and fixes to the account switch modal
* Factor out the account switcher logic to a hook
* Add haptic feedback on account switcher open
* Fix bad merge
---------
Co-authored-by: Samuel Newman <mozzius@protonmail.com>
* Don't automatically mention users with invalid handles
* don't mention when using did urls
* resolve profile from cache
* a little clearer
---------
Co-authored-by: Samuel Newman <mozzius@protonmail.com>
* move content languages to screen
* add dropdown library, style primary lang select
* update settings button
* show selected langauges in button
* use primary language in translator link
* update copy
* lint
* Prefilter the mergefeed to ensure a better mix of following and custom feeds
* Test suite improvements & tests for the mergefeed (#1499)
* Disable invite codes test for now
* Update test sim to latest iphone
* Introduce TestCtrls driver
* Add mergefeed tests
* Bold the saved feeds on mobile
* Improve the saved feeds loading state
* Add soft reset handler to feeds page
* Show feed descriptions in profile listing
* Add an 'about this feed' modal
* Fix type assertion
* Add tree-view experiment to threads
* Fix typo
* Remove extra minimalshellmode call
* Fix to parent line rendering
* Fix extra border
* Some ui cleanup
* upgrade api package
* add RecommendedFollows as a step in onboarding
* add list of recommended follows from suggested actor model
* remove dead code
* hoist suggestedActors into onboarding model
* add comments
* load more suggested follows on follow
* styling changes
* add animation
* tweak animations
* adjust styling slightly
* adjust styles on mobile
* styling improvements for web
* fix text alignment in RecommendedFollows
* dedupe inserted suggestions
* fix animation duration
* Minor spacing tweak
---------
Co-authored-by: Paul Frazee <pfrazee@gmail.com> and Eric Bailey <git@esb.lol>
* 🐛 Handle middle mouse click on feed list items
* ♻️ Refactor the event listener and turn it into a dedicated hook for web
* 🧹 Cleanup unnecessary Link changes
* Fix import
* Create native version of useAuxClick
---------
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
* Fix error state for recommended feeds
* Handle failure to set default feeds more safely
* Dont return undefined within react-query
* Update yarn.lock
* Feeds navigation on right side of desktop (#1403)
* Remove home feed header on desktop
* Add feeds to right sidebar
* Add simple non-moving header to desktop
* Improve loading state of custom feed header
* Remove log
Co-authored-by: Eric Bailey <git@esb.lol>
* Remove dead comment
---------
Co-authored-by: Eric Bailey <git@esb.lol>
* Redesign feeds tab (#1439)
* consolidate saved feeds and discover into one screen
* Add hoverStyle behavior to <Link>
* More UI work on SavedFeeds
* Replace satellite icon with a hashtag
* Tune My Feeds mobile ui
* Handle no results in my feeds
* Remove old DiscoverFeeds screen
* Remove multifeed
* Remove DiscoverFeeds from router
* Improve loading placeholders
* Small fixes
* Fix types
* Fix overflow issue on firefox
* Add icons prompting to open feeds
---------
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
* Merge feed prototype [WIP] (#1398)
* POC WIP for the mergefeed
* Add feed API wrapper and move mergefeed into it
* Show feed source in mergefeed
* Add lodash.random dep
* Improve mergefeed sampling and reliability
* Tune source ui element
* Improve mergefeed edge condition handling
* Remove in-place update of feeds for performance
* Fix link on native
* Fix bad ref
* Improve variety in mergefeed sampling
* Fix types
* Fix rebase error
* Add missing source field (got dropped in merge)
* Update find more link
* Simplify the right hand feeds nav
* Bring back load latest button on desktop & unify impl
* Add 'From' to source
* Add simple headers to desktop home & notifications
* Fix thread view jumping around horizontally
* Add unread indicators to desktop headers
* Add home feed preference for enabling the mergefeed
* Add a preference for showing replies among followed users only (#1448)
* Add a preference for showing replies among followed users only
* Simplify the reply filter UI
* Fix typo
* Simplified custom feed header
* Add soft reset to custom feed screen
* Drop all the in-post translate links except when expanded (#1455)
* Update mobile feed settings links to match desktop
* Fixes to feeds screen loading states
* Bolder active state of feeds tab on mobile web
* Fix dark mode issue
---------
Co-authored-by: Eric Bailey <git@esb.lol>
Co-authored-by: Ansh <anshnanda10@gmail.com>
* add React Query and hook up to existing functionality
* wire in remote data, add error message
* remove hard-coded feeds
* oops fix logic
* add loading state
* fix loading on mobile
---------
Co-authored-by: Eric Bailey <git@esb.lol>
* 🗺️ fix an issue where web devices that see the Drawer couldn't access Profile from said Drawer
* fix routes on web
* handle profile button active state
* add hack for web navigation
* fix comment
---------
Co-authored-by: Micah Maligie <kerosuppi@gmail.com>
* Update time.ts to handle very small or negative time differences
Right now, posts can appear to be from the future with a negative time difference (i.e. -3s appears). This change defines 'NOW' as less than 5 seconds old, and returns 'now' in that case.
It's not clear how localisation is handled - this may need translation.
* Add test for 'now' in time/ago(...)
Add tests for ago() for right now (i.e. 'now') and 10s ago to ensure the seconds case is still tested
Fixes#1263
Previously, opening the crop tool had 1:1 selected by default. So if you opened it and pressed Done without changing anything, it would format the image as 1:1.
After this change, None is selected by default. So if you open the crop tool and press Done without changing anything, nothing will change.
* update to expo 49
* update expo-camera to fix console erorrs
* run doctor again
* fix ts errors
* patch @sentry/react-native
Getting `cannot read property 'ignoreLogs' of undefined` in this file.
Ironically, this may be a cyclical imports problem. LogBox isn't enabled
in production, so this patch should only affect dev/test.
* fix type error
* reinstall newer reanimated
* pin expo-dev-client to fix reanimated dev-build issue
* fix type errors, fix bad conflict res
* Fix to notifications badge z-index on desktop
---------
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
* Move most responsive queries to the hook
* Fix invalid CSS value
* Fixes to tablet render of post thread
* Fix overflow issues on web
* Fix search header on tablet
* Fix QP margin in web composer
* Fix: only apply double gutter once to flatlist (close#1368)
* Fix styles on discover feeds header
* Fix double discover links in multifeed
* move `PreferencesHomeFeed` to a screen instead of a modal
* add web route for home feed preferences
* upgrade `@miblanchard/react-native-slider` to fix lint
* fix web route naming
* fix desktop web styling
* add `react-native-slider` mock
* Default isAdultContentEnabled to false on all devices.
The original intent of setting the default based on the device was
to make the maximally-permissive choice. It turns out this was a
mistake as it created sync issues between devices; users would be
confused by the lack of congruity between them. We have to go with
false by default to ensure sync is retained.
* Update preferences model to use new sdk api
* Delete dead code
* Dont show the iOS adult content warning in content filtering settings if adult content is enabled
* Bump @atproto/api@0.6.8
* Codebase style consistency
* use cursor for post cards
* ignore type error
* handle meta keys on non native links
(cherry picked from commit daccafea0b7ab21af6572767e496d20f32ead353)
* remove cursor on non-post notifications, not quite right
* Simplify link handling
---------
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
* defer loading of feeds until visible
* Fix: use existing hasLoaded
* Fix: dont query for latest during initial load
---------
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
* add emoji-mart package for emoji dropdown picker
* remove emoji picker modal
* load emoji mart data not as part of the main bundle
* remove @emoji-mart/data
* setup emoji insertion with events
* get emoji data from local static assets
* close emoji picker after one emoji has been inserted
* Switch emoji picker trigger to an icon
* Update emoji-mart-data.js
* make grabbing emoji data work on more browsers
---------
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
* allow toggling off/on multiple from main composer lang menu
* fix dropdown styles for long labels
* udpate model to use new string field
* update language UI
* save langs to history on submit
* remove edit
* clean up use new fields
* default to deviceLocales
* fix default valu
* feedback
* use radio icon
* add likes tab
(cherry picked from commit 6c5ffd964ca0b185ddfc37088d82712a006a1163)
* only show Likes tab to authenticated user
(cherry picked from commit ecc1254411d760158b6d7a4c5f05d940db872dfc)
* Bump @atproto/api@0.6.5
* fix types
---------
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
* add title attr to text text links
* Revert "add title attr to text text links"
This reverts commit c028cd184efd3b2788d8f46134eecf521e5d7b07.
* use css tooltips
* add to expanded post state
* handle theming
* add to bskyweb
The tiptap useEditor() hook creates an awkward challenge for passing
event handlers into its plugins and native events. By introducing a
memoized editor, we should be able to shuttle events out of tiptap
without retriggering the useEditor hook. The emitter can then change
its registered handlers with each state update.
* Don't insert a newline on cmd+entrl (close#1173)
* Don't linkify selected text on url-paste (close#1149)
* Disable the adult content controls if there is no media on the post (close#1169)
* Modify toShortUrl() to always include the full domain
* Shorten links in the composer to save on characters
* Apply some limits to the link card suggester
* ✨ Repupose report post modal and re-use for list reporting
* ✨ Allow reporting a feed generator
* ✨♻️ Refactor report modal into one shared component for reporting different collections
* ✅ Adjust report option selector in tests
* ✅ Add test for list reporting
* ♻️✨ Refactor reason options and add options for list and feedgen
* 🧹 Cleanup remaining todo
* Fix to mutelist react keys
* Fix regression from rebase
* Improve customfeed mobile header
---------
Co-authored-by: Paul Frazee <pfrazee@gmail.com>