* Rework SavedFeeds editor to make changes transactionally
* Fix hit slops
* Add layout animations
* Fix: dont let down go too far down
* Speed up layout transitions
* Use Redix FocusTrap (#5638)
* Use Redix FocusTrap
* force resolutions on radix libs
* add focus guards
* use @radix-ui/dismissable-layer for escape handling
* fix banner menu keypress by using `Pressable`
* add menu in dialog example to storybook
---------
Co-authored-by: Samuel Newman <mozzius@protonmail.com>
* use DismissableLayer/FocusScope for composer
* fix storybook dialog
* thread Portal through Prompt and avatar/banner
* fix dialog style regression
* remove tamagui
---------
Co-authored-by: Eric Bailey <git@esb.lol>
* Reduce post reason icon size & offset (#5522)
* Make x margin within pin icon the same
* Reduce post reason icon size and offset
* Use existing pin
---------
Co-authored-by: futur <me@futuristick.ca>
* Add alt text limit to image dialog
* GIF alt text too
* Fix
* tweaks, save alt on dialog dismiss
* simplify close behavior
* use state in gif alt
* state
---------
Co-authored-by: Hailey <me@haileyok.com>
* Scaffold embed draft types
These don't map 1:1 to the record structure. Rather, we select data from the draft on posting.
* Prefill initial quote
* Implement the reducer
* Move video state into composer state
* Represent video as embed
This is slightly broken. In particular, we can't remove video yet because there's no action that results in video embed being removed.
* Properly represent video as embed
This aligns the video state lifetime with the embed lifetime. Video can now be properly added and removed.
* Disable Add Video when we have images
* Ignore empty image pick
* Remove unused video field
* Stop exposing video dispatch
* Move cancellation out of the reducer
* Make useUploadStatusQuery controlled by jobId
* Rename SetStatus to SetProcessing
This action only has one callsite and it's always passing "processing".
* Move jobId into video reducer state
* Make cancellation scoped
* Inline useCompressVideoMutation
* Move processVideo down the file
* Extract getErrorMessage
* useServiceAuthToken -> getServiceAuthToken
* useVideoAgent -> createVideoAgent
* useVideoUploadLimits -> getVideoUploadLimits
* useUploadVideoMutation -> uploadVideo
* Use async/await in processVideo
* Inline onVideoCompressed into processVideo
* Use async/await for uploadVideo
* Factor out error messages
* Guard dispatch with signal
This lets us remove the scattered signal checks around dispatch.
* Move job polling out of RQ
* Handle poll failures
* Remove unnecessary guards
* Slightly more accurate condition
* Move initVideoUri handling out of the hook
* Remove dead argument
It wasn't being used before either.
* Remove unused detailed status
This isn't being used because we're only respecting that state variable when isProcessing=true, but isProcessing is always false during video upload.
If we want to re-add this later, it should really just be derived from the reducer state.
* Harden the video reducer
* Tie all spawned work to a signal
* Preserve asset/media for nicer error state
* Rename actions to match states
* Inline useUploadVideo
This abstraction is getting in the way of some future work.
* Move MIME check to the only place that handles it
* Add composer reducer
* Support adding images
Co-authored-by: Mary <git@mary.my.id>
* Support updating and deleting images
Co-authored-by: Mary <git@mary.my.id>
* Derive images state from composer state
Co-authored-by: Mary <git@mary.my.id>
---------
Co-authored-by: Mary <git@mary.my.id>
* add to dropdown menu
* use normal profile mutation hook
* add pin as reason
* request pins
* shadow update
* rm logs
* get prev pinned from getProfile
* fix toasts
* invalidate after appview ready
* don't mutate params
* rm log
* use checkCommited rather than manual whenAppViewReady
* move to mutation
* even more optimistic optimistic update
* allow pins in `posts_and_author_threads`
* update @atproto/api
* add reasonPin type
* fix strange type error in unrelated query
* another missing type