* add prop to `ListImpl` for `content-visibility` style
* change to `disableContentVisibility`
* lint
* tweaks
* Keep the fix more general
* Clarify ambiguity
---------
Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
* alf the repost dropdown on web + import icons
* alf like icon
* convert other post controls
* add missing padding to share button
* refine buttons and use better icons
* revert buttonicon changes
* remove ButtonIcon and ButtonText from repost dialog
* use 15px font size when not big
* reduce size and use contrast_25
* add hover state to logged out view
* add `userSelect: 'none'` to buttons
* use width rather than height
* fix quote close behaviour
* prettier
* Fix Esc on repost
* Use new icons for placeholder
* Fix placeholder
---------
Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
* translation expo module
* add `onClose` and `onReplacementAction`
* rm onReplacementAction
* make all props published
* make translation api available globally w/o wrapper (#4110)
* conditionally import the translation module
* only use native translation if language is probably supported
* open native translation via dropdown menu
---------
Co-authored-by: Hailey <me@haileyok.com>
Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
* `flexShrink` on iOS and web
`flexShrink` on iOS and web
`flexShrink` on iOS and web
actually, `flexShrink`
use `flex`
* adjust web
* `expect-error` `onMouseUp`
* ignore ref type check
* Lower seen threshold to 1.5s
* Send feedContext for replies
* Use a simpler and more reliable feedContext fallback
---------
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
* Handle home algo with backwards compat
* Remove todo, fix pwi view
* Simplify filter logic
* Handle edge case
* Handle home algo in FeedSourceCard
* Fix handling of pinned feed if home algo is disabled
* Handle home algo on ProfileFeed screen
* Rename
* Fix pinned feeds key
* Improve perf of pinned feeds with primary algo
* Update statsig API
* Revert unneeded changes
* Support following feed as well
* Better formatting
* Clarify primary algo usage
* Better comment
* Handle saved feed screen edge case
* Restore Feeds sparkle, fix line height
* Move gate call down
* Filter out primary algo from feeds page
* Filter dupe from Feeds screen
* Simplify logic
* Missing following handling
* Hide primary feed setting outside exp
* Revert testing change
* Migrate usePinnedFeedInfos
* Migrate FeedSourceCard
* Migrate Feeds screen
* Migrate SavedFeeds screen
* Handle timeline in feed infos
* Finish migrating ProfileFeed, FeedSourceCard
* Migrate ProfileList
* Finalize mutation hooks
* Allow unsaving lists
* Handle following feed on Feeds screen
* Handle following on SavedFeeds
* Get rid of deprecated interface usages
* Handle no pinned feeds
* Handle no feeds on Feeds screen
* Reuse component on SavedFeeds screen
* Handle no following feed
* Remove primary algo references
* Migrate to new plural APIs
* Remove unused event
* Prevent duplicate keys
* Make handling much more clear
* Dedupe useHeaderOffset
* Filter unknown feed types at source
* Use just following
* Immprove key handling
* Resume from last tab
* Bump sdk
* Revert Gemfile
* Additional protection in FeedSourceCard
* Fix ProfileList save/unsave handling
* Translate
* Translate
* Match existing handling post-signup
* Ensure onboarding results in correct selected feeds
* Some testing tweaks on create/onboarding
* Revert primary algo consderations
* Remove comment
* Handle default feed setting
* Rm unnecessary type cast
* Remove premature gate check
* Remove nullable check in onPageSelecting, assume the pager checks bounds
* Use null for default selected feed
* Rm unrelated change
* Remove the concept of __key__
I don't think this concept is consistent.
It's introduced on FeedSourceInfo which is used both by pinned feeds and by useFeedSourceInfoQuery. Pinned feeds use the pinning ID there. But there is no pinning ID for useFeedSourceInfoQuery. So this means this field is sometimes one thing and sometimes some other thing. That is a decent sign that it shouldn't be on that type at all.
It's not used anywhere except the desktop feed enumeration. It seems reasonable to assume there that we wouldn't want to show the same feed URL twice. (And if it does occur in the array twice, IMO we should solve that at the API level and dedupe it on read or next write.) So I think we should just use the URL in that place. (I used the descriptor, which is equivalent.)
* Dedupe pinned feeds by URL on read
* Filter timeline out of mergefeed sources
* Put FeedDescriptor into FeedSourceInfo
* Group saved info with feed for pins
This removes a loop within a loop within a loop.
* Fix Feeds link on native
---------
Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
* Implement onViewableItemsChanged on List.web.tsx
* Introduce onItemSeen to List API
* Add FeedFeedback tracker
* Add clickthrough interaction tracking
* Add engagement interaction tracking
* Reduce duplicate sends, introduce a flushAndReset to be triggered on refreshes, and modify the api design a bit
* Wire up SDK types and feedContext
* Avoid needless function allocations
* Fix schema usage
* Add show more / show less buttons
* Fix minor rendering issue on mobile menu
* Wire up sendInteractions()
* Fix logic error
* Fix: it's item not uri
* Update 'seen' to mean 3 seconds on-screen with some significant portion visible
* Fix non-reactive debounce
* Move methods out
* Use a WeakSet for deduping
* Reset timeout
* 3 -> 2 seconds
* Oopsie
* Throttle instead
* Fix divider
* Remove explicit flush calls
* Rm unused
---------
Co-authored-by: dan <dan.abramov@gmail.com>
* Replace pluralize with plural or Plural
* Replace all pluralize (defined by src/lib/strings/helpers.ts) with plural or Plural (defined by @lingui/macro) to make some UI elements translatable.
* Delete pluralize() and related test.
* Import @formatjs polyfill libraries for plural on ios and android
- ios and andorid: import `@formtjs/intl-locale` and `@formatjs/intl-pluralrules` to polyfill `Intl.Locale` and `Intl.PluralRules` which are used in `plural()` and '<Plural />'.
- update `plural` use in notification messages for better translation.
* Rewrite to pass lint
* Add Catalan plural polyfill
* more replacement
* import zh plural data for zh-CN
* Refactor feed header components (#2964)
* Move home-related files to view/com/home
* Add HomeHeader in front of FeedTabBar
* Move isDekstop check outside FeedsTabBar
* Remove PWI logic from tabbar
* Separate platform-specific layout from shared logic
* Rename Home Feed Prefs to Following Feed Prefs (#2965)
* use `useOpenLink` hook for links in ALF (#2975)
* use `useOpenLink` hook for links in ALF
* web only for `outline`
* increase timeout to 15s (#2958)
* Normalize relative day (#2874)
* fix: normalize relative date
* chore: add comments
* refactor: skip flooring normalized diff
* refactor: let -> const
* fix: get own copy of date to prevent mutating
* refactor: rounding does the same trick
* Add handle validation to create account UI (#2959)
* show uiState errors in the box as well
simplify copy
update ui for only letters and numbers
add ui validation to handle selection
* simplify names
* Fix accidental text-node render
---------
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
* Make dim theme dim (#2966)
* Make dim color scheme dim
* Tweaks
* Overall tweaks
* We have to go darker
* Tweak saturation of blues in dim
* Increase contrast on dark-dark mode
* adjust dim
---------
Co-authored-by: Eric Bailey <git@esb.lol>
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
Co-authored-by: Hailey <me@haileyok.com>
* Fix dim mode unread notif color
* use `showControls` to show/hide live text icon on ios (#2982)
* Update .po files
* fix reversed icons in validator 🤦 (#2991)
* Adjust `windowSize` on `PostThread` `FlatList` (#2989)
* adjust window size, cells batching period
* rm batching period change
* Pluralize 'follow(s)'
* Include a space between the msgid count and "follower(s)/following(s)" so the translator can adjust the translated count line to fit within the Drawer.
* pluralie '# following'
* Fix & Update
* Rewrite to use Plural
* rmeove unused import
* When commiting changes, disable 'simple-import-sort' plugin in .eslintrc.js to sync with bluesky-social:main
* Revert simple-import-sort/imports related changes
* Move ProfileHoverCard web to plural util
* Followings -> following
* Add plural following to hovercard
* Followings -> Following
---------
Co-authored-by: Takayuki KUSANO <kusano@tkusano.jp>
Co-authored-by: Takayuki KUSANO <65759+tkusano@users.noreply.github.com>
Co-authored-by: dan <dan.abramov@gmail.com>
Co-authored-by: Hailey <me@haileyok.com>
Co-authored-by: Mary <148872143+mary-ext@users.noreply.github.com>
Co-authored-by: Eric Bailey <git@esb.lol>
* add alt text dialog
* multiline alt text input
* add pressable alt text badge
* rename `ALT: ` to `Alt text: ` to avoid including old bad ones
* reuse alt text reminder
* reuse alt text reminder in gallery
* add alt text reminder in the dialog itself
* autofocus text input
* reorder components to fix tab order
* fix close btn position
* empty state for new chat dialog
* use terniary
* dark mode pending state
* copy message text option
* fix service url input (scrollview ftw)
* whoops, fix equality
* slightly reduce horizontal message padding
* Add optional momentum events to scroll context
* If there is a velocity, don't snap until momentum end
* Don't show bar on scroll down
* Rm onMomentumBegin
* ios player
autoplay after recycle
remove all items from AVPlayer queue
recurururururursion
use managers in the view
add prefetch
make sure player items stay in order
add controller and item managers
start of the view
create module, ios
* android player
smoother
basic caching
prep cache
somewhat works
backup
other files
android impl
blegh
lets go
touchup
add prefetch to js
use caching
* bogus testing commit
* add dims to type
* save
* add the dimensions to the embed info
* add a new case
* add a new case
* limit this case to giphy
* use gate
* Revert "bogus testing commit"
This reverts commit b3c8751b71f7108de9aa843b22ded4e0249fa854.
* add web player base
* flip mp4/webp
* basic mp4 player for web
* move some stuff into `ExternalLinkEmbed` instead
* use a class component for web
* remove extra component
* add `onPlayerStateChange` event type on web
* layer properly
* fix tests
* add new test
* about ready. native portions done, a few touch ups on web needed
show placeholder on ios
fix type
rm log
display thumbnail until video is ready to play
add oncanplay, playsinline
remove unused method
add `isLoaded` change event
release player when finished
apply gc to the view
cleanup logs
android gc
rm log
automatic gc for assets
make `nativeRef` private
remove unnecessary `await`
cleanup
rev log
only play on prepare whenever needed
rm unused
perfperfperf
rm var
comment + android width
native height calculations
rm pressable
add event dispatcher on android
add event dispatcher on ios
* ready to test ios
fix autoplay ios
clean
oops
* autoplay on web
* normalize across all platforms
add check for `ALT:`
separate gif embed logic to another file
handle permissions requests
flatten web styles
normalize styles
normalize styles
prefetch functions
pause animatable on foreground android
nits
one more oops
idk where that code went
lint
rethink the usage
wrap up
android
clear bg
update gradle
more android
rename dir
update android namespace
web
ios
add deps
use webp
rm unused
update types
use webp on mobile
* rm gate from types
* remove unused event param
* only start placeholder op if doesn't exist in disk cache
* fix gifs animating on app resume android
* remove comment
* add `isLoaded` for ios
* add `isLoaded` to Android
* onload for web
* add visual loading state
* rm a log
* implement isloaded for android
* dialogs
* replace `webpSource` with `source`
* update prop name
* Move to Tenor for GIFs (#3654)
* update some urls
* right order for dimensions
* add GIF coder for ios
* remove giphy check
* rewrite tenor urls
* remove all the unnecessary stuff for consent
* rm print
* rm log
* check if id and filename are strings
* full size playback controls
* pass tests
* add accessibility to gifs
* use `onPlay` and `onPause`
* rm unused logic for description
* add accessibility label to the controls
* add gif into to external embed in composer
* make it optional
* gif dimensions
* make the jsx look nicer
---------
Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
Co-authored-by: Samuel Newman <mozzius@protonmail.com>
* error boundary on gif picker
* add dialog.close for web users
* fix size of dialog on web
* Safer coercion
---------
Co-authored-by: Dan Abramov <dan.abramov@gmail.com>