The two RichText classes are not mutually assignable - `UnicodeString` has a
private field and the SDK brands `did`/`uri` as template literal types - so
every producer and consumer of a RichText instance has to move in one step.
`detectFacets` now takes a lex client instead of the legacy agent, which is
what removes the last hard agent dependency from these files. Handle
resolution is an appview job, so the appview client is threaded in: through
`useAppviewClient` in the hooks and dialogs, and through a new
`appviewClient` option on `apilib.post` (Composer already had the client to
hand). The rest of the post pipeline still writes through the agent.
Facet feature checks move from the `AppBskyRichtextFacet` validators to the
generated `#/lexicons` schemas, matching how the rest of the app narrows
lexicon types.
Display sinks still read facets off `@atproto/api` view types, which are the
same lexicon but typed with plain strings. `asSdkFacets` widens them at those
call sites and goes away once the view types come from the SDK too.
* delete media from existsCache when deleting
* revoke media URLs
* skip revoking objecturls until the composer is completely closed
* [Drafts] Metrics (#9794)
* metrics for drafts
* Nit: format
* nit: use new util for clarity
* nit: use new util for clarity
---------
Co-authored-by: Eric Bailey <git@esb.lol>
---------
Co-authored-by: Eric Bailey <git@esb.lol>
* Add ESLint rule to enforce Lingui msg usage
Adds a custom ESLint rule 'lingui-msg-rule' that ensures the Lingui _()
function is called with msg`` template literals or plural/select macros,
preventing accidental misuse like _('string') which bypasses i18n.
https://claude.ai/code/session_01JMXXPUgAHiSBGmfGwUojKy
* Support msg({...}) descriptor form and add auto-fix
- Allow msg() function call form: _(msg({message: 'Hello'}))
- Add auto-fix for string literals: _('Bad') -> _(msg`Bad`)
- Add auto-fix for untagged templates: _(`Bad`) -> _(msg`Bad`)
- No auto-fix for variables/function calls (not safely fixable)
https://claude.ai/code/session_01JMXXPUgAHiSBGmfGwUojKy
* fix complex cases
* run autofix HELL YEAH
---------
Co-authored-by: Claude <noreply@anthropic.com>
* WIP
* Clean up growthbook code, integrate into init and sessions
* Move everything out of React
* Add metrics client
* Move to separate file
* Shared metadata cache
* Ensure we update metadata when session ID changes
* Ensure userMetadata is cleared when logging out
* WIP revamp
* Integrate feature gates into analytics context
* Clean up old code
* Fix useMeta util
* Some comments and cleanup
* Add logger to base analytics context
* Refactor current route handling
* Rip out LogEvent from navigation
* Update tracking endpoint
* Migrate toClout
* Clear out statsig client
* Add todo, reset logger readme
* Ope fix statsig noop
* Refactor logging in feed-feedback, add debug logging to metrics client
* Remove LogEvents alias for Metrics
* Prefer root package export
* Remove Metrics alias from logger
* [APP-1782] Migrate to new analytics APIs (#9735)
* Migrate logEvent to useAnalytics
* Migrate logger.metric to useAnalytics
* Migrate tricky spot, fix types
* Migrate remaining tricky spot
* Missed one
* Remove metric() from logger
* Migrate useGate to useAnalytics
* Remove all other StatSig mentions
* Update event payload
* Update logger tests
* Mock expo method
* Fix session ID bug
* Add session ID test
* Add test for metrics client
* Clarify intent
* Clean up core analytics file
* Clean up the call once utils
* Fix TODO
* Fix TODO
* Fix TODO
* Fix TODO
* Fix TODO
* Remove debug code
* Fix navigation context
* OK nav context is not working, todo
* Checkpoint: works but feels hacky
* Fix navigation context issue
* Improve feature API
* Improve metric logging
* Update logger tests
* Delete root PostThread component
* Remove PostThreadItem, migrate DebugMod to use new components
* Remove other unused components
* Move PostThreadFollowBtn to new home
* Move PostThreadComposePrompt to new home
* Remove gate
* Keep naming in DebugMod
* rm v1 prefs
---------
Co-authored-by: Samuel Newman <mozzius@protonmail.com>
* use button instead of TextLink for show more
* Match post text size, provide interaction feedback
* Move to new Post components dir
* Prettier
---------
Co-authored-by: Eric Bailey <git@esb.lol>
* Direct port of embeds to new arch
(cherry picked from commit cc3fa1f6cea396dd9222486c633a508bfee1ecd6)
* Re-org
* Split out ListEmbed and FeedEmbed
* Split out ImageEmbed
* DRY up a bit
* Port over ExternalLinkEmbed
* Port over Player and Gif embeds
* Migrate ComposerReplyTo
* Replace other usages of old post-embeds
* Migrate view contexts
* Copy pasta VideoEmbed
* Copy pasta GifEmbed
* Swap in new file location
* Clean up
* Fix up native
* Add back in correct moderation on List and Feed embeds
* Format
* Prettier
* delete old video utils
* move bandwidth-estimate.ts
* Remove log
* Add LazyQuoteEmbed for composer use
* Clean up unused things
* Remove remaining items
* Prettier
* Fix imports
* Handle nested quotes same as prod
* Add back silenced error handling
* Fix lint
---------
Co-authored-by: Samuel Newman <mozzius@protonmail.com>
* WIP
* Sorting working
* Rough handling of hidden/muted
* Better muted/hidden sorting and handling
* Clarify some naming
* Fix parents
* Handle first reply under highlighted/composer
* WIP RaW
* WIP optimistic
* Optimistic WIP
* Little cleanup, inserting dupes
* Re-org
* Add in new optimistic insert logic
* Update types
* Sorta working linear view optimistic state
* Simple working version, no pref for OP
* Working optimistic reply insertions, preference for OP
* Ensure deletes are coming through
* WIP scroll handling
* WIP scroll tweaks
* Clean up scrolling
* Clean up onPostSuccess
* Add annotations
* Fix highlighted post calc
* WIP kill me
* Update APIs
* Nvm don't kill me
* Fix optimistic insert
* Handle read more cases in tree view
* Basically working read more
* Handle linear view
* Reorg
* More reorg
* Split up thread post components
* New reply tree layout
* Fix up traversal metadata
* Tighten some spacing
* Use indent ya idiot
* Some linear mode cleanup
* Fix lines on read more items
* Vibe coding to success
* Almost there with read mores
* Update APIs
* Bump sdk
* Update import
* Checkpoint new traversal
* Checkpoint cleanup
* Checkpoint, need to fix blocked posts
* Checkpoint: think we're good, needs more cleanup
* Clean it up
* Two passes only
* Set to default params, update comment
* Fix render bug on native
* Checkpoint parent rendering, can opt for slower handling here
* Clean up parent handling, reply handling
* Fix read more extra space
* Fix read more in linear view
* Fix hidden reply handling, seen count, before/after calc
* Update naming
* Rename Slice to ThreadItem
* Add basic post and anchor skeletons
* Refactor client-side hidden
* WIP hidden fetching
* Update types
* Clean up query a bit
* Scrolling still broken
* Ok maybe fix scrolling
* Checkpoint move state into meta query
* Don't load remote hidden items unless needed
* skeleton view
* Reset hidden items when params change
* Split up traversal and avoid multiple passes
* Clean up
* Checkpoint: handling exhausted replies
* Clean up traversal functions further
* Clean up pagination
* Limit optimistic reply depth
* Handle optimistic insert in hidden replies
* Share root query key for easier cache extraction
* Make blurred posts not look like ass
* Fix double deleted item
* Make optimistic deleted state not look like crap in tree view
* Fix parents traversal 4 real
* Rename tree post
* Make optimistic deletions of linear posts not look bad
* Rename linear post components
* Handle tombstone views
* Rename read more component
* Add moreParents handling
* Align interaction states of read more
* Fix read more on FF
* Tree view skeleton
* Reply composer skele
* Remove hack for showing more replies
* Checkpoint: sort change scrolling fixed
* Checkpoint: learned new things, reset to base
* Feature gate
* Rename
* Replace show more
* Update settings screen
* Update pkg and endpoint
* Remove console
* Eureka
* Cleanup last commit
* No tests atm
* Remove scroll provider
* Clean up callbacks, better error state
* Remove todo
* Remove todo
* Remove todos
* Format
* Ok I think scrolling is solid
* Add back mobile compose input
* Ok need to compute headerHeight every time
* Update comments
* Ok button up web too
* Threads v2 tweaks (#8467)
* fix error screen collapsing
* use personx icon for blocked posts
* Remove height/width
* Revert unused Header change
* Clarify code
* Relate consts to theme values
* Remove debug code
* Typo
* Fix debounce of threads prefs
* Update metadata comments, dev mode
* Missed a spot
* Clean up todo
* Fix up no-unauthenticated posts
* Truncate parents if no-unauth
* Update getBranch docs
* Remove debug code
* Expand fetching in some cases
* Clear scroll need for root post to fix jump bug
* Fix reply composer skeleton state
* Remove uneeded initialized value
* Add profile shadow cache
* Some metrics
* prettier tweak
* eslint ignore
* Fix optimistic insertion
* Typo
* Rename, comment
* Remove wait
* Counter naming
* Replies seen counter for moderated sub-trees
* Remove borders on skeleton
* Align tombstone with optimistic deletion state
* Fix optimistic deletion for thread
* Add tree view icon
* Rename
* Cleanup
* Update settings copy
* Header menu open metric
* Bump package
* Better reply prompt (#8474)
* restyle reply prompt
* hide bottom bar border for cleaner look
* use new border hiding hook in DMs
* create `transparentifyColor` function
* adjust padding
* fix padding in immersive lpayer
* Apply suggestions from code review
Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com>
* Integrate post-source
(cherry picked from commit fe053e9b38395a4fcb30a4367bc800f64ea84fe9)
---------
Co-authored-by: Samuel Newman <mozzius@protonmail.com>
Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com>
* move post ctrls to #/components
* restructure post controls, basic share menu
* add border radius to searchable people list for android
* Revert "add border radius to searchable people list for android"
This reverts commit 417449086e25b82f5683b12f6405d972f48ce50e.
* add copy link to native share menu
* reorg files again
* open native share menu on long press
* Translation comments
Thanks @surfdude29
* abs path
* update type imports, remove forwardRef
* rm react import
* equal spacing of buttons, extract disco debug
* add better icon
* add right offset to share button for visual alignment
* Add recent chats to share menu (#7853)
* add recent chats to share menu
* Update RecentChats.tsx
Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com>
* Update RecentChats.tsx
* add fading edge on andriod
* tweak scrollview
* Add metrics and A/B alt icon to share menu (#8401)
* add metrics
* add a/b tested alt icon
---------
Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com>
* More descriptive share text/icon on web (#7854)
* more descriptive share text on web
* revert dev mode changes
* add missing import
* use modified share icon everywhere
* Add back conflicting changes
---------
Co-authored-by: Eric Bailey <git@esb.lol>
---------
Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com>
Co-authored-by: Eric Bailey <git@esb.lol>
* Bump SDK
* Use consistent type in profile query
* Omit from constraint for profile shadow
* Replace isRecord with isValidRecord in QuoteEmbed
* Omit type from constraint for old ProfileCard
* Omit type from constraint in profile queries where appropriate
* Use correct type for update profile mutation
* Conslidate and fix check for isValidRecord in Post.tsx
* Replace isRecord with isValidRecord in PostThreadItem
* Remove redundant cast in PostThreadFollowBtn
* Ignore errors in DebugMod screen
* Use matching type in ProfileFollows screen
* Use matching type in ProfileFollowers screen
* Migrate to isValidRecord in PostFeedItem
* Use matching type if PostRepostedBy
* Omit type from constraint in avatar props
* Use matching types in NotificationFeedItem
* Todo
* Use isValidRecord in NotfyFeedItem
* Improve MediaPreview types
* Migrate another isValidRecord in NotificationFeedItem
* Migrate to isValidView in queries/util
* Migrate to isValidRecord in threadgate/util
* Fix types in threadgates
* Fix up types in starter-packs queries
* Todo
* Specify exact types in search-posts
* Use internal type util to align types
* Ditto last
* Migrate postgate/index
* Specify exact types in post-thread
* Use correct type in post-quotes
* FIX potential bug in post-thread
* Use correct type in post-feed
* Add correct type guards to notifications/feed
* Migrate a guard in notifications/util
* Migrate guard in Wizard/State
* [@next] Profile handling, migrate `ProfileCard` (#7347)
* Introduce new utils for profiles, migrate old ProfileCard
* Rename, reorg
* Add parseEmbed utils
* Expand AnyProfileView to include chat profile view, update post shadow to reflect this
* Cast for perf reasons
* Tighten up types now that we have AnyProfileView
* Add fastIsType util
* Use `assertDid`
Co-authored-by: Matthieu Sieben <matthieusieben@users.noreply.github.com>
* Use util types
* Comment
* Use fastIsType where no validation was happening before
* suggestions (#7382)
* suggestions
* Revert unneeded changes
---------
Co-authored-by: Eric Bailey <git@esb.lol>
* Use new util
* Rename to dangerousIsType
* Convert object shape
* Use dangerous util
* Use dangerous util
* Use dangerous util, we can trust post records
* Use dangerous util
* Use AnyProfileVIew
* Convert object shape
* Clean up handling
* Patch moderateProfile to accept known profile views, to discuss
* Add AnyStarterPackView and related, implement in first usage
* Remove validation, fix type, fix ref
* Migrate over list-conversations
* Clarify intent behind precacheProfile and its unstable query cache
* Clean up unstable profile cache
* Fix types during label creation in PwiOptOut (#7346)
* Tighten types in queries/list
* Chat: use correct profile views
* Chat: fix log type check
* Chat: construct lexically correct shape, even though it's only internal usage
* Chat: use correct profile types
* Chat: fix type check in logs
* Starter: use correct profile types
* Starter: use correct profile types
* Starter: tighten types to match lex
* Any profile type will work in blocked-and-muted
* Use dangerous util
* Use dangerousIsType
* Update new ProfileCard to use AnyProfileView
* Use dangerousIsType
* Remove outdated todo
* Use correct profile type
* Use correct profile types
* Tighten up types
* Use dangerousIsType
* Chat: more type fixes
* Remove unused file
* Add a few utils
* Remove unused file
* Ignore feedPost.__source
* Clean up types, leave validation in critical path
* Use dangerousIstype
* Use ANyProfileView
* Use isValidRecord
* Use dangerousIsType
* Fix types in ListCard
* Fix FeedInterstitials types
* Fix types in FeedCard
* Fix types in dms ReportDialog
* Fix types in SearchablePeopleList
* Fix bad type in composer opts
* Starter: ok these need to be loose too
* Clarify docs
Co-authored-by: Matthieu Sieben <matthieusieben@users.noreply.github.com>
* Less code
Co-authored-by: Matthieu Sieben <matthieusieben@users.noreply.github.com>
* Use package exports
Co-authored-by: Matthieu Sieben <matthieusieben@users.noreply.github.com>
* Use package exports
* Bump sdk, update $Typed imports
* Format
* Format
* Fix weird TS error
* Remove patch
* Beter name
* It's memo, can validate
* Tighten up parseEmbed, dogfood
* Bump sdk
* Use asPredicate
* Loosen types a bit
* use asPredicate
* Fix types
* Use asPredicate
* Use asPredicate
* Use asPredicate
* Clean up upsertProfile types
* Use asPredicate
* Use Un util
* Fix types
* Use new AnyProfileView
* Use dangerousIsType
* Use asPredicate
* Use asPredicate
* Add fallback content-type to pass typecheck
* Clean up upsertProfile types
* Align types
* Use dangerousIsType
* Use dangerousIsType
* Use asPredicate
* Align types
* Convert findLast
* Align types
* Just ignore type errors and use findLast
* Rename atproto -> bsky
* Add validate util
* Fix type error
* Loosen types
* Export post
* rename atp bsky
* Remove unused code
* minor changes
* Bump deps
* Fix types
* Tighten back up loose check
* Tighten back up loose check
* Fix small bug
* Update comment
* Revert change
---------
Co-authored-by: Matthieu Sieben <matthieusieben@users.noreply.github.com>
Co-authored-by: Matthieu Sieben <matthieu.sieben@gmail.com>
* tweaks to constants (#7478)
* add did
* use correct did
* typo
* tweak
* Prevent Drawer gesture conflicting with Suggestions scroll (#7468)
* Extract BlockDrawerGeesture
* Block drawer when scrolling interstitials
(cherry picked from commit 9e3f2f4374)
* yolo interstitial
* yolo mode
* right swipe
* fix nav gesture
* vibe controls
* collapsible post text
* rm blurview, cover for tall videos
* smarter video source handling
* use thumbnails, improve perf significantly
* better android loading
* improve aspect ratio
* optimize source changes
* rm spinner on ios
* whoops, remove debug `false`
* FIX WRONG VIDEOS SHOWING UP
* don't spring on way down
* release video players when leaving screen
* remove jank animation
* Add grid
* improve contract, fix double tap
* Filter out posts without videos
* Only do grid on native
* Pipe through feedSourceUri and link to feed
* Handle passed through params
* Partial revert, just filter posts to start at index
* Clean up cards, remove entry interstitial
* Tweak handle
* Change constant name
* Rename some things
* Make types legit
* Clean up more naming
* Add placeholder for grid view
* Handle web, set up new organization
* Begin work on Header
* Replace types
* Squashed commit of the following:
commit 3d1be4c0f1
Author: Samuel Newman <mozzius@protonmail.com>
Date: Fri Jan 17 01:08:05 2025 +0000
extend animation
commit c9f199413b
Author: Samuel Newman <mozzius@protonmail.com>
Date: Fri Jan 17 01:01:24 2025 +0000
fix gap
commit 22e520795f
Author: Samuel Newman <mozzius@protonmail.com>
Date: Fri Jan 17 00:50:16 2025 +0000
thinner bar, format time
commit c32427f214
Author: Samuel Newman <mozzius@protonmail.com>
Date: Fri Jan 17 00:47:57 2025 +0000
fix 2 in 3 screens
commit cbf84c08d6
Author: Samuel Newman <mozzius@protonmail.com>
Date: Fri Jan 17 00:45:46 2025 +0000
rm unneeded var
commit 7e0e100177
Author: Samuel Newman <mozzius@protonmail.com>
Date: Fri Jan 17 00:41:18 2025 +0000
scrubberrrrr
* use white with opacity rather than gray
* Simultaneous gesture
* cleanup attempt
* fix jank
* link to profile on press
* fix jitter fr this time
* mostly fix android flicker
* Maybe fix row generation
* Add content hider to video card
* emoji in post text
* reduce update rate
* fix type error
* Fix grid layout trailing single item
* Add Discover interstitial, settings, includes pin for now
* Explore interstitial, handle dimissal, pinning, compact card
* Only use grid placeholder on native
* Update events
* Add feature gate
* android nav bar fixes + lower update speed
* fix interval + decel rate on interstitials
* attempt to fix broken scrub on android (not working)
* follow button
* Part out the interstitials for perf, add view more
* Remove prod web route
* Wrap interstitials with BlockDrawerGesture
* Bring video cropping in line with images (#7462)
* Mimic image cropping for videos on web
* Same on native
* Rename variables for clarity
* Fix Android scrubbing
* Add FeedFeedbackProvider
* Remove swipe gesture
* fix light status bar behaviour
* bump
* feedback
* Copy pasta to new location
* Copy pasta part deux
* Filter only videos
* Make whole text clickable to expand
(cherry picked from commit 4cf31120779f4e06eb4c296b3d4b53814d432b07)
* move scrubber to own file
* end card
* add icon to end card
* add min view time to viewability config
* play haptic on like
* tweak feedback
* tweak feedback again
* Moderation
(cherry picked from commit 6b6b471cfb363031284b3e7a1f6e0ade3ac4ae47)
* remove bad check
* fix feedback for new video grid
* change prop name to items as well
* Simplify logic
* Fix mod footer
* Give scrubber more space on android
* Add subtle track behind scrubber, adjust opacity
* wire in feed context again...
* Add better a11y desc to card
* Fix key issue
* Update a11y copy
* Fix scrubber height
* improve scrubber animation
* Make follow button more obvious
* Make header back button more clear
* Disable interactions with actual video el
* keep content away from the bottom safe area
* fix blur
* fix moderation issue
* improve contrast on mod screen
* Make moderation static per item
* Memoize rows
* Optimizations
* Take video moderation into account
* Only blur titles for list blur
* Change copy
* Bump blur radius
* animate text in both directions
* Rm unused field
* Filter by root early
* Refactor for clarity
* add compose prompt to scrubber
* rm log
* tweak gradient
* Bump SDK, use contentMode to power video feed
* Ensure ProfileFeed view also supports video feed
* improve scrubber on android
* rm border from footer
* Update prod video feed did
* Separate caches
* Add lil hover to View More
* Fix undefined logic, remove header for interstitial
* Ungate
* Fix stuckness
* remove extra useless map
* Fix effect cleanup
* Send seen without cleanup
* Simplify react stuff
* Earlier early return to avoid loading flash
* remove scrubber placeholder
* Remove opacity hack
* Render useEvent conditionally
* Fix Android flash
---------
Co-authored-by: dan <dan.abramov@gmail.com>
Co-authored-by: Samuel Newman <mozzius@protonmail.com>
Co-authored-by: Eric Bailey <git@esb.lol>