* Convert lightbox to get/set
* Work around software-mansion/react-native-reanimated#6613
* Use get/set in more places
* Port MainScrollProvider to get/set
* Port more to get/set
* Port composer to get/set
* Remove unnecessary thread hops in composer
* Port more things to get/set
* Convert more to get/set, remove redundant runOnJS
* Convert remaining cases to get/set
* [Web] Clicking root link twice refreshes the screen
* Scope it to navigation action
In practice this means -- just for the bottom mobile web tab bar.
* Fix minor localization issues in Spanish:
- Use 'pack de inicio' instead of 'paquete de inicio'
- Use 'Inténtalo' instead of 'Intenta'
- Fix 'Por favor'
- Do not use 'una' as article for 'posts'
- Use 'Eliminado' instead of 'Removido'
* Update src/locale/locales/es/messages.po
Co-authored-by: oledfish <88390729+oledfish@users.noreply.github.com>
* Use 'paquete de inicio' and fix typos
---------
Co-authored-by: oledfish <88390729+oledfish@users.noreply.github.com>
* Remove legacy strings in FR localisation file
* Update French translations
* Fix typos and inconsistent French translations
* Get rid of a few 'Veuillez' in French locale to appear less formal
* Update catalan messages.po
back to 100%
Please have a look at it @jordimas @darccio @surfdude29 @rortan134
* Update catalan messages.po
aplying @jordimas corrections
* Update messages.po
* Reduce page size for request
* Remove refetch interval entirely
* Add comment
* Optimistically mark as read
* Drop default active poll interval to 60s from 5min
* Only optimistically update unread count if success
* Update Node.js to 20.x in Dockerfile
* Update Node.js types and engines entry to 20.x
* Update Node.js version in .nvmrc
* Use node version from .nvmrc in linting job
* Use Type Assertion for clearTimeout
* Inline useImageAspectRatio
* Switch AutoSizedImage to read dimensions from Expo Image cache
* Include thumbnail dimensions in image data
* Use dims from Expo Image cache in lightbox
* Fix wiring so all thumbnails get dimensions
* Fix type
* Oops
* Measure all rects for embeds
* Measure avi rects too
* Animate lightbox in and out
* Account for safe area in the animation
* Tune spring times
* Remove null checks for measurements
* Remove superfluous view
* Block swipe while opening
* Interpolate width/height on native side for Android
* Make it fast by animating only affine transforms
* Fix tall image final state
The initial animation frame is still off on both platforms.
* Try to squeeze perf
* Avoid blank images during animation on iOS
* Fix bad rebase
* Fix a huge memory issue due to expo/expo#24894
* Fix last frame flash
* Fix thum dim calculation for tall images
* move out avatarstack to own file
* improved settings switch
* prefix with @
* fix types
* up chevron
* respect reduced motion setting
* respect reduced motion in other place
* Preserve shape in lightbox
* Rename shapes to semantic meanings
It looks like after all I do want to fork based on those.
* Round avatars on the web
* Oops
* Make iOS scrollview bounded to the image
I've had to remove the dismiss handling because the scroll view no longer scrolls at rest.
* Fix double-tap not working right after a vertical swipe
It seems like for some reason the vertical swipe is still being handled by the scroll view, so double tap gets eaten while it's "coming back". But you don't really see it moving. Weird.
* Add an intermediate LightboxImage component
* Hoist useImageDimensions up
* Implement xplat dismiss gesture
This is now shared between platforms, letting us animate the backdrop and add a consistent "fly away" behavior.
* Optimize Android compositing perf
* Fix supertall images
For example, https://bsky.app/profile/schlagteslinks.bsky.social/post/3l7y4l6yur72e
* Fix oopsie
* Assign an ID to lightbox and use it as a key
* Consolidate lightbox props into an object
* Remove unused prop
* Move SafeAreaView declaration
* Keep SafeAreaView always mounted
When exploring Android animation, I noticed its content jumps on the first frame. I think this should help prevent that.
* Pass safe area down for measurement
* Remove dependency on SCREEN in Android event handlers
* Remove dependency on SCREEN in iOS event handlers
* Remove dependency on SCREEN on iOS
* Remove dependency on SCREEN on Android
* Remove dependency on JS calc in controls
* Use flex for iOS layout
* Remove useless memo
* Use explicit values when useImageAspectRatio doesn't know
It's not very good that you can't distingiush when we haven't loaded vs when we're certain. This shifts the burden of dealing with missing values to the caller.
* Check cache early
* Handle src change
* Rewrite image-sizes.fetch to avoid mixing async styles
* Make image-sizes LRU
Code is copy paste from useImageDimensions.ts
* Rm unused fields
* Derive aspect on the fly
* Factor useImageDimensions out of useImageAspectRatio
* Move useImageDimensions into image-sizes
* Make lightbox use the same cache
* Wire up known dimensions to the lightbox
* Handle division by zero in the hook
* Use safe aspect for lightbox calculations
* Extract function to read contentHeight later
* Remove autoscroll to bottom
We're going to implement this in the UI layer instead.
* Remove worklet from non-worklets to avoid confusion
* Rename and invert hasScrolled* variables
Their naming was too ambiguous (they used to represent "has scrolled _away_ from X"). I inverted them and clarified the naming. No functional changes.
* This should not be necessary
It's already called not just from UI thread. And it only sets shared values, which can be done from either thread.
* Make hasScrolledTo* derived values
It wasn't always correct to derive them manually because reading from .value is stale on JS thread. We could fix that by using the local variables but it makes more conceptualy sense to treat these as derived anyway.
* Reimplement autoscroll-to-bottom in UI layer
Doing it here ensures we also do it when you add an image at the end of the thread. Otherwise it's very confusing where it went.
* Use fancy ScrollView
This seems to fix ScrollView getting stuck after inserting images at the thread end on Android.
* More aggressive scroll-to-bottom
* "Fix" cursor getting stuck on Android
* Revert "Use fancy ScrollView"
This reverts commit 04e34a54e3b75f8a77de5062bff5fe6e76420bbb.
* Basic adding of posts
* Switch active post on focus
* Conditionally show plus button
* Insert posts midthread
* Track active/inactive post
* Delete posts in a thread
* Focus after deletion
* Tweak empty post detection
* Mix height for active only
* Move toolbar with post on web
* Fix footer positioning
* Post All button
* Fix reply to positioning
* Improve memoization
* Improve memoization for clearVideo
* Remove unnecessary argument
* Add some manual memoization to fix re-renders
* Scroll to bottom on add new
* Fix opacity on Android
* Add backdrop
* Fix videos
* Check alt for video too
* Clear pending publish on error
* Fork alt message by type
* Separate placeholder for next posts
* Limit hitslop to avoid clashes
* Switch to using post ID for post actions
* Pass post-bound dispatch to ComposerPost
* Check video state for entire thread
* Always bind post actions to an ID
* Rename variable for consistency
* Fix clashing keys
* start building storybook
* add title
* add some styles
* try out new icons
* more settings list component parts
* make text do the spacing
* clean up storybook
* gated new settings screen
* switch account
* add current profile
* use Layout.Screen
* Layout.Header and Layout.Content
* translate helpdesk text
thanks @surfdude29!
Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com>
* add account settings
* undo changes to export car dialog
* privacy and security screen
* Translate protect account stuff
Thanks @surfdude29!
Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com>
* content and media settings
* about settings
* 2fa copy
Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com>
* a11y and appearance
* use new components for appearance settings
* redesign accessibility settings
* Update ContentAndMediaSettings.tsx
Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com>
* add divider
* remove a11y and appearance middleman screen
* fix web settingslist styles
* new SettingsList.Group component
* explain how portal magic works
* hide pwioptout in old location
* Update Settings.tsx
Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com>
* replace gate with `IS_INTERNAL`
* add IS_INTERNAL to app-info.web
* fix profile area growing
* add close button to switch account
---------
Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com>
* Plumb thumbUri down to the lightbox
* Remove onLoad tracking from lightbox
* Hook up placeholder URI to the image
* Fix NaN causing crash on double tap while offline
* Protect against NaNs in the future
* Added translations for new strings
* Fixed some translations: made them more natural and consistent
---------
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
* Update catalana messages.po
Just a few lines, including pending corrections from @surfdude29
Please have a look at it @jordimas @darccio @surfdude29 @rortan134
* Update messages.po
correct typo
* Update messages.po
little typo
* fix feed reorder test
* fix feed reorder test pt 2
* fix edit profile test
* fix mod list test
* fix fab
* add assert
* one more assertVisible
* fix search test
* tap now now if it shows up
* Display non-post embeds in composer preview
* Remove starter pack special case from ExternalLinkEmbed
This should not be needed because starter pack composer preview now goes through the record preview codepath, just like in the feed/post view.
* Hide record ext links if quote is present
* Align remove buttons
Remove the implicit top padding in record embeds and make it conditional, which is similar to how we treat external link embeds. This makes the X button appear in the same place for record embeds as with links.
* move self label button?
* rm
* make sure its usable on large font sizes
* tweak wording
* update icon
* tweaks
* change button label and change opacity when no media (#5794)
* Tweak it moar (#5807)
* Tweak it moar
* Pluralize
* Labels
---------
Co-authored-by: Samuel Newman <mozzius@protonmail.com>
Co-authored-by: Eric Bailey <git@esb.lol>
* fetch all accounts in one go
* delete unused component
* add safeareaview to logged out layout
* add safe area insets to LoggedOut view
* add safe area insets to the error boundary
* sanitize displaynames/handles
* use button for X
* increase spacing
* clean up drawer
* add a lil bit of padding
* Drawer nits (#5778)
* Avi stuff
* Rm SafeAreaView, not working on Android
* Dividers and spacing
* Fix count on android, ended up refactoring the whole MenuItem
* Litttttle more space
* Improve NavSignupCard
* format nit
---------
Co-authored-by: Samuel Newman <mozzius@protonmail.com>
---------
Co-authored-by: Eric Bailey <git@esb.lol>
* New link card styles
* Cleanup of consituent parts, add hover state
* Fix gif alt text view
* Fix alt text view more
* Remove dupe
* Update remove button
* Remove added margin on gif
* Update catalan messages.po
Here we go again, just a few lines, if you would be so kind as to take a look @jordimas @darccio @surfdude29 @rortan134
* Update messages.po
@jordimas corrections
* 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>
* Update translation
* Fixed
* Update translation
* Update translation
* Update translation
* Update translation
* Suggested fix by Hima-Zinn
* Update translation
* Update translation
* Update translation
* Translate "pinned"
* Update translation
* Refactor video uploads (#5570)
* 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
* Manage video reducer from composer reducer (#5573)
* 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
* Rename some files and variables (#5587)
* Move composer reducers together
* videoUploadState -> videoState
* Inline videoDispatch
* 🪵📌 (#5594)
* [🐴] Reduce amount that message sent date is shown (#4228)
* Fix profile header buttons (#5558)
* Fix profile header buttons
* Adjust labeler buttons too
* Fix load state jumps
* Small tweak for web
* Remove log
* Update
* Revert "Update"
This reverts commit b073c04830.
* Revert "Fix profile header buttons (#5558)"
This reverts commit c00c5fa495.
* Revert "[🐴] Reduce amount that message sent date is shown (#4228)"
This reverts commit af8e3422a6.
* Revert "🪵📌 (#5594)"
This reverts commit 3ab5190aca.
* Revert "Rename some files and variables (#5587)"
This reverts commit 475708ea30.
* Revert "Manage video reducer from composer reducer (#5573)"
This reverts commit 59589e34a3.
* Revert "Refactor video uploads (#5570)"
This reverts commit f74f9bc1d9.
* Update translation
* Update translation
* Delete unused entries
* Restored the trailing dot by #5622
---------
Co-authored-by: dan <dan.abramov@gmail.com>
Co-authored-by: Samuel Newman <mozzius@protonmail.com>
Co-authored-by: Eric Bailey <git@esb.lol>
* Update and inconsistency fixes to pt-br translation
* Update and inconsistency fixes to pt-br translation
Updated last translator
* More tr
* More translations updated
* 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>
* Remove unsafe type coercions from posting embed
* Extract resolveEmbed into a separate function
* Refactor to if-else because these are mutually exclusive
* Refactor resolveEmbed to early returns
* Separate resolving embed and media
* Parallelize image upload
* Prioritize not dropping media
* 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
* Tweak nav item count style
* Fix nav item icon width and alignment
* Just refactor the thing
* New compose button
* Z index
* Rounded
* Tweak gradient
* Tweak gradient
* Tweak gradient
* Solid
* Adjust position of counter
* Always a circle
* grow banner when overscrolling
* add blurview
* make backdrop blur as it scrolls
* add activity indicator
* use rotated spinner instead of arrow
* persist position of back button
* make back button prettier
* make blur less jarring
* Unify effects
* Tweak impl
* determine if should animate based on scroll amount
* sign comment
---------
Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
* Support emoji in text with custom font
* Add emoji support to elements that need it
* Remove unused file causing lint failure
* Add web only link variant
* Refactor PostMeta
* Reduce avi size in feeds
* Fix alignment, emoji, in PostMeta
* Smaller avis in notifications
* Shrink post placeholder avi
* Handle the handle again
* Link cleanup
* Cleanup unused props
* Fix text wrapping in timestamp
* Fix underline color
* Tighten up spacing
* Web only whiteSpace
* Support emoji in text with custom font
* Add emoji support to elements that need it
* Remove unused file causing lint failure
* Fix a few more emoji locations
* Couple more
* No throw
* chore: handle built css assets
* chore: let prettier handle css code
* refactor: let webpack build css assets
* chore: prettier on bskyembed
* chore: touch empty.txt on css directory
* chore: do the same to the workflow
* add lib
* add validation
* log
* add some common typos
* add tests
* reset hasWarned state on edit
* shorten path
* Move test file, adjust regex, add test
* Get real nit picky
---------
Co-authored-by: Eric Bailey <git@esb.lol>
* tweak image styles
* fix reply image preview and covert to atoms
* increase rounding on media inset border
* decrease gap on desktop
* fix inset styles
* increase rounding on embeds to `md`
* Couple edge cases
---------
Co-authored-by: Eric Bailey <git@esb.lol>
* Set up additional mod authorities
* Filter out non-configurable mod authorities
* WIP
* Working
* Cleanup, add mod
* Cleanup
* Add more debug logs
* Tweak logs
* Filter out imperative labels from typeaheads
* Filter hideable content from notifications
* Add api
* Fall back in dev
* Remove space
* Use prod endpoint
* Add tiny notice
* Add notice to labeler card, show all labelers
* Add some comments
* Decouple language settings
* Normalize on read/write
* Refactor
* Support device locale on app startup
* Cleanup, port to web
* Clean up comments
* Comment
* Try not to mutate
* Protect util handling, update test
* Dedupe array values
* Parallel font loading
(cherry picked from commit 10e2b05b575bbbf8b0ca5b4a336817cd902d712b)
* Handle failures
* Rely on font-face and preload tags for font loading (#5431)
* Cache fonts for a year
* Add fontScale, gate it, fix some computes
* Add inter, integrate
* Clean up
* Apply to old Text component
* Use numeric weight
* Cleanup
* Clean up appearance settings
* Global tracking
* Fix regular italic variant
* Refactor settings and fontScale values
* Remove flags
* Get rid of lower weight font usage
* Remove gate from settings
* Refactor appearance settings for reuse
* Add neue type nux
* Update defaults
* Load fonts, add fallback families
* Load fonts via plugin in production
* Fixes
* Fix for web
* Nits
---------
Co-authored-by: Hailey <me@haileyok.com>
* Pre-fill alt text with 10-million card post (#5377)
* Clean up type
* Tweak alt copy
* Add pt translation, fix typo
---------
Co-authored-by: Calvin <clavin@users.noreply.github.com>
* feat: Add hook on web app to open composer with 'N' keyboard shortcut
* Extract, don't fire open composer if already open
* Ignore interactive elements
---------
Co-authored-by: João Gabriel <joaog@nocorp.io>
Co-authored-by: Hailey <me@haileyok.com>
* Add Russian translation
* Update messages.po
* Update messages.po (draft)
* Добавлены новые строки для перевода
В ручную объеденил исправленный RU с самым новым EN. Могут быть ошибки но быстрый тест проблем не выявил.
* Переведены не переведенные строки, некоторые исправления перевода.
* Еще небольшие правки
* Update messages.po (draft)
* Update messages.po (stage)
* Update messages.po
* Init lingui compiling ru language
* Update messages.po
* Update messages.po (clear)
* Update messages.po
* Update messages.po
* change await import to await Promise.all
* Update messages.po
* Update messages.po (clear)
---------
Co-authored-by: DearFox <59219907+DearFox@users.noreply.github.com>
* DRY up video service auth code
* throw error if over upload limits
* use token
* xmark on toast
* errors with nice translatable error messages
* Update src/state/queries/video/video.ts
---------
Co-authored-by: Hailey <me@haileyok.com>
* Limit height of images within posts
* Add some future-proofness
* Comments, improve a11y
* Adjust ALT, add crop icon
* Fix disableCrop in record-with-media posts
* Clean up aspect ratios, handle very tall images
* Handle record-with-media separately, clarify intent using enums
* Adjust spacing
* Adjust rwm embed image size on mobile
* Only do reduced layout if images embed
* Adjust gap in small embed variant
* Clean up grid layout
* Hide badge on small variant with one image
* Remove crop icon from image grid, leave on single image
* Fix sizing in Firefox
* Fix fullBleed variant
* tweak
* error state for upload toolbar
* catch errors in upload status query
* stop query on error
---------
Co-authored-by: Hailey <me@haileyok.com>
* Animate the like button
* Respect reduced motion
* Move like count into animated component
* Animate text
* Fix layout on Android
* Animate text backwards too
* Fix bad copypasta
* Reflect nonlocal updates to animated values
* video settings modal in composer
* show done button on web
* rm download options
* fix logic for showing settings button
* add language picker (wip)
* subtitle list with language select
* send captions & alt text with video when posting
* style "ensure you have selected a language" text
* include aspect ratio with video
* filter out captions where the lang is not set
* rm log
* fix label and add hint
* minor scrubber fix
* Rename variable to disambiguate with parent scope
* More variables where they are used
* Inline variables
* Add suggestions in profile
* Gate it
* rm space
* Remove header suggestions under gate
* refactor: consistent localized formatting
* refactor: localized date time
* refactor: localize relative time with strings
* chore: fix typo from copy-paste
* Clean up useTimeAgo
* Remove old ago
* Const
* Reuse
* Prettier
---------
Co-authored-by: Mary <git@mary.my.id>
* implement AppBskyEmbedVideo lexicon in player
* add alt to native player
* add prerelease package
* update prerelease
* add video embed view manually from record
* fix type error on example video
* black bg + use aspect ratio on web
* add video to feeds
* fix video overflowing aspect ratio
* remove prerelease package
---------
Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com>
* Updated translation
* Update translation
* Update translation
* Update translation
* Only show replies in Following if following all involved actors (#4869)
* Only show replies in Following for followed root and grandparent
* Remove now-unnecessary check
* Simplify condition
* Respect labels on feeds and lists (#4818)
* Prep
* Pass in optional moderation to FeedCard
* Compute moderation decision, filter contentList contexts, pass into card
* Let's go a different route
* Filter from within search queries
* Use same search query for starter packs
* Filter lists from profile tabs
* Cleanup
* Filter from profile feeds
* Moderate post embeds
* Memoize
* Use ScreenHider on lists
* Hide both list types
* Fix crash on iOS in screen hider, fix lineheight
* Memoize renderItem
* Reuse objects to prevent re-renders
* tweak list header (#4870)
Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com>
* bskyweb: optional basic auth password middleware (#4759)
* Update translation
* Revert "Update translation"
This reverts commit 3a7b74f47b.
* Revert "bskyweb: optional basic auth password middleware (#4759)"
This reverts commit bc3a27d40f.
* Revert "tweak list header (#4870)"
This reverts commit 34e7e5cba2.
* Revert "Respect labels on feeds and lists (#4818)"
This reverts commit 9ec6fde288.
* Revert "Only show replies in Following if following all involved actors (#4869)"
This reverts commit e2cc4bb4af.
* Update translation
* Update translation
* Update translation
* Updated translation
* Update translation
* Update translation
* Unified existing translations of "hidden" and "community".
* Update translation
* Update translation
* Update translation
---------
Co-authored-by: dan <dan.abramov@gmail.com>
Co-authored-by: Eric Bailey <git@esb.lol>
Co-authored-by: Samuel Newman <mozzius@protonmail.com>
Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com>
Co-authored-by: bnewbold <bnewbold@robocracy.org>
* Split minimal shell mode into headerMode and footerMode
For now, we'll always write them in sync. When we read them, we'll use headerMode as source of truth. This will let us keep footerMode independent in a future commit.
* Remove fixed_bottom_bar special cases during calculation
This isn't the right time to determine special behavior. Instead we'll adjust footerMode itself conditionally on the gate.
* Copy-paste setMode into MainScrollProvider
This lets us fork the implementation later just for this case.
* Gate footer adjustment in MainScrollProvider
This is the final piece. Normal calls to setMode() keep setting both header and footer, but MainScrollProvider adjusts the footer conditionally.
* show quote posts
* fix filter
* fix keyExtractor
* move likedby and repostedby to new file structure
* use modern list component
* remove relative imports
* update quotes count after quoting
* call `onPost` after updating quote count
* Revert "update quotes count after quoting"
This reverts commit 1f1887730a.
* implement
* update like count in quotes list
* only add `onPostReply` where needed
* Filter quotes with detached embeds
* Bump SDK
* Don't show error for no results
---------
Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com>
Co-authored-by: Hailey <me@haileyok.com>
Co-authored-by: Eric Bailey <git@esb.lol>
* Fix orphaned feed slices, handle blocks
* Revert to filerting out orphan threads
* Support NotFoundPost views too
* Just kidding, use ReplyRef.root as source of grandparent data
* Fixes
* Rename logout to logoutEveryAccount
* Add logoutCurrentAccount()
* Make all "Log out" buttons refer to current account
Each of these usages is completely contextual and refers to a specific account.
* Add Sign out of all accounts to Settings
* Move single account Sign Out below as well
* Prompt on account removal
* Add Other Accounts header to reduce ambiguity
* Spacing fix
---------
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
* update @atproto/api
* add starter pack embed
* update depreciated BskyAgent to AtpAgent
* unrelated, but avoid direct import of type
* nits
* rm commented out code
---------
Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com>
* set auto category to ambient every time a new player is made
* mute on foregrounding
* remember previous state
---------
Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com>
Co-authored-by: Hailey <me@haileyok.com>
* Don't kick the user on network errors
* Track online status for RQ
* Use health endpoint
* Update test with new behavior
* Only poll while offline
* Handle races between the check and network events
* Reduce the poll kickoff interval
* Don't cache partially fetched pinned feeds
This isn't a new issue but it's more prominent with the offline handling. We're currently silently caching pinned infos that failed to fetch. This avoids showing a big spinner on failure but it also kills all feeds which is very confusing. If the request to get feed gens fails, let's fail the whole query.
Then it can be retried.
* play when returning from background
* play when unfullscreening
* play when entering fullscreen, just to be sure
* state -> ref
---------
Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com>
* update expo-video
* pause when on a different screen
* rm collapsable
* add mute/unmute button
---------
Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com>
* fix bg color
* unique video urls for debug
* improve controls slightly
* mute until fullscreen
---------
Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com>
* Unify onPostReply handler
* Show just-posted replies above OP replies
* Only do this for the highlighted post or thread mode
It's confusing to have your post displace OP thread or other people's leaf posts.
* overflow posts, via contentHider
* margin->padding for a bit more leeway
* overflow notifications
* overflow on header
* revert from contenthider, put on text in all places
* fix zalgo text in handle in composer
---------
Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com>
* attempt some sort of "usurping" system
* polling-based active video approach
* split into inner component again
* click to steal active video
* disable findAndActivateVideo on native
* new intersectionobserver approach - wip
* fix types
* disable perf optimisation to allow overflow
* make active player indicator subtler, clean up video utils
* partially fix double-playing
* start working on controls
* fullscreen API
* get buttons working somewhat
* rm source from where it shouldn't be
* use video elem as source of truth
* fix keyboard nav + mute state
* new icons, add fullscreen + time + fix play
* unmount when far offscreen + round 2dp
* listen globally to clicks rather than blur event
* move controls to new file
* reduce quality when not active
* add hover state to buttons
* stop propagation of videoplayer click
* move around autoplay effects
* increase background contrast
* add subtitles button
* add stopPropagation to root of video player
* clean up VideoWebControls
* fix chrome
* change quality based on focused state
* use autoLevelCapping instead of nextLevel
* get subtitle track from stream
* always use hlsjs
* rework hls into a ref
* render player earlier, allowing preload
* add error boundary
* clean up component structure and organisation
* rework fullscreen API
* disable fullscreen on iPhone
* don't play when ready on pause
* debounce buffering
* simplify giant list of event listeners
* update pref
* reduce prop drilling
* minimise rerenders in `ActiveViewContext`
* restore prop drilling
---------
Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com>
Co-authored-by: Hailey <me@haileyok.com>
* Broadcast the update in the same tick
The motivation for the original code is unclear. I was not able to reproduce the described behavior and have not seen it mentioned on the web. I'll assume that this was a misunderstanding.
* Remove defensive programming
The only places in this code that we can expect to throw are schema.parse(), JSON.parse(), JSON.stringify(), and localStorage.getItem/setItem/removeItem. Let's push try/catch'es where we expect them to be necessary.
* Don't write or clobber defaults
Writing defaults to local storage is unnecessary. We would write them as a part of next update anyway. So I'm removing that to reduce the number of moving pieces.
However, we do need to be wary of _state being set to defaults. Because _state gets mutated on write. We don't want to mutate the defaults object. To avoid having to think about this, let's copy on write. We don't write to this object very often.
* Refactor: extract tryParse
* Refactor: move string parsing into tryParse
* Extract tryStringify, split logging by platform
Shared data parsing/stringification errors are always logged. Storage errors are only logged on native because we trust the web APIs to work.
* Add a layer of caching to readFromStorage to web
We're going to be doing a read on every write so let's add a fast path that avoids parsing and validating.
* Fix the race condition causing clobbered writes between tabs
* Delete logic for legacy storage
* Delete superfluous tests
At this point these tests aren't testing anything useful, let's just get rid of them.
* Inline store.ts methods into persisted/index.ts
* Fork persisted/index.ts into index.web.ts
* Remove non-essential code and comments from both forks
* Remove async/await from web fork of persisted/index.ts
* Remove unused return
* Enforce that forked types match
* Don't reconstruct threads from separate posts
* Remove post-level dedupe for now
* Change repost dedupe condition to look just at length
* Delete unused isThread
* Delete another isThread field
It is now meaningless because there's nothing special about author threads.
* Narrow down slice item shape so it does not need reply
* Consolidate slice validation criteria in one place
* Show replies in context
* Make fallback marker work
* Remove misleading and now-unused property
It was called rootUri but it was actually the leaf URI. Regardless, it's not used anymore.
* Add by-thread dedupe to non-author feeds
* Add post-level dedupe
* Always count from the start
This is easier to think about.
* Only tuner state need to be untouched on dry run
* Account for threads in reply filtering
* Remove repost deduping
This is already being taken care of by item-level deduping. It's also now wrong and removing too much (since it wasn't filtering for reposts directly).
* Calculate rootUri correctly
* Apply Following settings to all lists
* Don't dedupe intentional reposts by thread
* Show reply parent when ambiguous
* Explicitly remove orphaned replies from following/lists
* Fix thread dedupe to work across pages
* Mark grandparent-blocked as orphaned
* Guard tuner state change by dryRun
* Remove dead code
* Don't dedupe feedgen threads
* Revert "Apply Following settings to all lists"
This reverts commit aff86be6d37b60cc5d0ac38f22c31a4808342cf4.
Let's not do this yet and have a bit more discussion. This is a chunky change already.
* Reason belongs to a slice, not item
* Logically feedContext belongs to the slice
* Update comment to reflect latest behavior
* Prep
* Pass in optional moderation to FeedCard
* Compute moderation decision, filter contentList contexts, pass into card
* Let's go a different route
* Filter from within search queries
* Use same search query for starter packs
* Filter lists from profile tabs
* Cleanup
* Filter from profile feeds
* Moderate post embeds
* Memoize
* Use ScreenHider on lists
* Hide both list types
* Fix crash on iOS in screen hider, fix lineheight
* Memoize renderItem
* Reuse objects to prevent re-renders
* state for video uploads
* get upload working
* add a debug log
* add post progress
* progress
* fetch data
* add some progress info, web uploads
* post on finished uploading (wip)
* add a note
* add some todos
* clear video
* merge some stuff
* convert to `createUploadTask`
* patch expo modules core
* working native upload progress
* platform fork
* upload progress for web
* cleanup
* cleanup
* more tweaks
* simplify
* fix type errors
---------
Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com>
* Copy FeedViewPost into FeedSliceItem
* Explicitly construct feed slice items by copying known fields
* Type rootItem as FeedViewPost for now
Mergefeed logic relies on that.
* Unify reason and __source for slice items
* Move feedContext out of FeedSliceItem
* Remove slice.isFlattenedReply
* Remove unnused slice.ts
* Inline slice.isFullThread
* Refactor condition for clarity
* Extract slice.includesThreadRoot
* Encapsulate more usages of slice.rootItem into slice
* Rename slice.rootItem so semi-private slice._feedPost
* Move reason into slice
* Simplify slice ctor argument
* Reorder getters to reduce diff
* Make feedContext a getter to reduce diff
* add ffmpeg-kit-react-native
* get select video button + compression working
* up res to 1080p
* add progress component
* move logic out of compressVideo
* (WIP) add lonestar compression
* rework web compression a bit
* mess around with adding a thumbnail
* 3mbps
* replace
* use 3mbps
* add expo-video
* remove unnecessary try/catch
* rm ToastAndroid
* fix web
* wrap lazy component in suspense
* gate video select button
* rm web compression
* flip sign
* remove expo-video from web
* review nits
* add video picker permissions + rm temp buttons
* add ffmpeg-kit-react-native
* replace
* hls-capable player
* start trying to hoist up video player instance
* hoist video player and move things around
* always show native controls
* fix controls on expo video android
* gate temp video player in feed
* rm IS_DEV, doesn't do what I thought it did
* use __DEV__ instead
---------
Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com>
Co-authored-by: Hailey <me@haileyok.com>
* fix web
* show back button on tablet for certain settings screens
* move headers to inside of scrollview
---------
Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com>
* set height to 20+(2*hairline)
* animate switch
* Try to align on line height across platforms
* Use border 1px
---------
Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com>
Co-authored-by: Eric Bailey <git@esb.lol>
* use appropriate icons for toasts
* use info for session expiry
* tweak size
* message -> safeMessage
---------
Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com>
* replace unused `followers` prop with social proof
* Introduce 'minimal' version
* Gate social proof one explore page, fix space if no desc
* Use smaller avis for minimal
---------
Co-authored-by: Eric Bailey <git@esb.lol>
* header display name rtl support
* highlighted post rtl
* move `NON_BREAKING_SPACE` to an external constant
* rtl support in search dropdown
* profile card rtl
* old profile card rtl
* hover card
* wizard list card
* new chat
* account card
* chat header
* clean up notifications
* just force LTR on meta display name
* Update French localization
* écriture inclusive for other usage of `amis`
* add one more string
* Apply suggestions from code review
Co-authored-by: Stanislas Signoud <signez@stanisoft.net>
* Update revision date
* translate new strings
* Apply suggestions from code review
Co-authored-by: Stanislas Signoud <signez@stanisoft.net>
---------
Co-authored-by: Stanislas Signoud <signez@stanisoft.net>
* Use user action and viewing history to inform suggested follows
* Remove dynamic spreads
* Track more info about seen posts
* Add ranking
---------
Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
* handle off screen visibility observer.
* Revert "handle off screen visibility observer."
This reverts commit e499ea0ed6.
* key ftw
* Remove special case
---------
Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
* Add the animated checkmark svg
* Add progress guide list and task components
* Add ProgressGuide Toast component
* Implement progress-guide controller
* Add 7 follows to the progress guide
* Wire up action captures
* Wire up progress-guide persistence
* Trigger progress guide on account creation
* Clear the progress guide from storage on complete
* Add progress guide interstitial, put behind gate
* Fix: read progress guide state from prefs
* Some defensive type checks
* Create separate toast for completion
* List tweaks
* Only show on Discover
* Spacing and progress tweaks
* Completely hide when complete
* Capture the progress guide in local state, and only render toasts while guide is active
* Fix: ensure persisted hydrates into local state
* Gate
---------
Co-authored-by: Eric Bailey <git@esb.lol>
Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
* Add home guided tour (WIP)
* Add web handling of the tour
* Switch to our fork of rn-tourguide
* Bump guided-tour
* Fix alignment on android
* Implement home page tour trigger after account creation
* Add new_user_guided_tour gate
* Add a title line to the tour tooltips
* A11y improvements: proper labels, focus capture, scroll capture
* Silence type error
* Native a11y
* Use FocusScope
* Switch to useWebBodyScrollLock()
---------
Co-authored-by: Eric Bailey <git@esb.lol>
* Use discriminated union
* Integrate interstitials
* Add gates and handling for variants
* Only show interstitials for logged in accounts since flags are based on user ID
* Nit
---------
Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
* Add interstitials, component tweaks, placeholders
* Tweak feed card styles
* Port over same fix to ProfileCard
* Add browse more link on desktop
* Rm Gemfile
* Update logContext
* Update logContext
* Add click metric to cards
* Pass through props to ProfileCard.Link
* 2-up grid for profile cards on desktop web
* Add secondary_inverted button color
* Use inverted button color
* Adjust follow button layout
* Update skeleton
* Use round button
* Translate
* New label pills
* Fix type errors, add default case
* Remove negative margin, only works in some places
* Fix alignment edge case
* Add a bit of padding
---------
Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
* Change login form to use uncontrolled inputs
* Debounce state updates in account creation to reduce flicker
* Refactor state-control of account creation forms to fix perf without relying on debounces
* Remove canNext and enforce is13
* Re-add live validation to signup form (#4720)
* Update validation in real time
* Disable on invalid
* Clear server error on typing
* Remove unnecessary clearing of error
---------
Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
* Extract ListCard from FeedCard
* Export FeedCard.Action and optionally include in ListCard
* Remove list dual usage from most of FeedCard
* Update usages of FeedCard and ListCard
* Add back list purpose logic
* Make Action comp easier to use, clarify list purpose
* Rename Action to SaveButton
* Break up new profile card for easier re-use
* Break things up a bit more
* Add round variant support and other button props
* Handle blocks
* Add Outer export
* Tweak space
* Fix footer messages in StarterPack wizard and updates ja messages
* Updates to minimize diff
* Revert "Updates to minimize diff"
This reverts commit 4d1dfe131a.
* Revert "Fix footer messages in StarterPack wizard and updates ja messages"
This reverts commit 9a90898abc.
* Fix labels for plurals in starter packs
* Update translations
---------
Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
* replace threadgate modal with alf dialog
* add accessibility to selectable
* add aria
* hide spinner once fetched
* add `hasOpenDialogs` value to context
* remove state
* Rm loading state
* Update the threadgate dialog button theming
* Factor out the threadgate editor and add editing to post views
* Mark messages for localization
* Use colors from mute dialog
* Remove unnecessary effect
* Reset state on dialog dismiss
* Clearer CTA
* Fix bugs
* Scope keyboard fix
* Rm getAreDialogsActive (no longer needed)
---------
Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
* Add lists support to FeedCard
* Add useSavedFeeds query, similar to usePinnedFeedInfos
* Integrate into Feeds screen
* Fix alignment on mobile
* Update usages
* Add placeholder loading state
* Handle no feeds state
* Reuse previous data for placeholder
* Staged loading
* Improve staged loading
* Use setQueryData approach to pre-caching
* Add types for a little more safety
* Fix precaching
---------
Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
* Rework WhoCanReply controls in threads to blend more nicely
* Fix layout
* Fix post control hitslops
* Move dialog content to separate component
---------
Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
description:"Create a report for an issue you have experience in the app."
labels:["bug"]
body:
- type:markdown
attributes:
value:|
Thanks for taking the time to report an issue you've found in the app! Before you submit this issue, please make sure you've searched for similar issues that are already open and being tracked. If you find an open issue that seems relevant to yours, it is best to leave a response there with your information instead of opening a new issue, since it helps to consolidate the info in one place.
- type:textarea
attributes:
label:Steps to Reproduce
description:|
Please provide the steps that may reproduce the issue that you are experiencing. The more concise of a
reproduction that you provide, the easier it will be for us to identify the issue and fix it in a timely manner.
placeholder:|
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
validations:
required:true
- type:textarea
attributes:
label:Attachments
description:|
If possible, please provide any images or videos that may help us understand the issue you are experiencing.
validations:
required:false
- type:dropdown
attributes:
label:What platform(s) does this occur on?
multiple:true
options:
- iOS
- Android
- Web (Desktop)
- Web (Mobile)
validations:
required:true
- type:input
attributes:
label:Device Info
description:|
Please provide the device information that you are using when experiencing this issue. This can include the
device model, operating system version, and any other relevant information.
validations:
required:false
- type:input
attributes:
label:What version of the app are you using?
description:|
You can easily find this information by visting the Settings screen in the app, and tapping on the version info
at the bottom of the screen. All the relevant information will be copied to your clipboard, and you will be
able to share it here.
validations:
required:true
- type:textarea
attributes:
label:Additional Information
description:|
Please provide any additional information that you think may be helpful in identifying the issue you are
experiencing. This can include any error messages, logs, or other information that you think may be relevant.
description:"Create a bug report for builds using the New Architecture. If you are not sure what that means, don't use this template, and instead use the default bug report template."
labels:["bug","fabric"]
body:
- type:checkboxes
attributes:
label:You're running a build that uses the React Native New Architecture, right?
description:This template is specifically for issues related to builds that use the React Native New Architecture. If you are not sure what that means, this template is probably not relevant to you, and you should use the default Bug Report template.
options:
- label:I am running a build that uses the New Architecture
required:true
- type:markdown
attributes:
value:|
Thanks for taking the time to report an issue you've found in the app! Before you submit this issue, please make sure you've searched for similar issues that are already open and being tracked. If you find an open issue that seems relevant to yours, it is best to leave a response there with your information instead of opening a new issue, since it helps to consolidate the info in one place.
- type:textarea
attributes:
label:Steps to Reproduce
description:|
Please provide the steps that may reproduce the issue that you are experiencing. The more concise of a
reproduction that you provide, the easier it will be for us to identify the issue and fix it in a timely manner.
placeholder:|
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
validations:
required:true
- type:textarea
attributes:
label:Attachments
description:|
If possible, please provide any images or videos that may help us understand the issue you are experiencing.
validations:
required:false
- type:dropdown
attributes:
label:What platform(s) does this occur on?
multiple:true
options:
- iOS
- Android
validations:
required:true
- type:input
attributes:
label:Device Info
description:|
Please provide the device information that you are using when experiencing this issue. This can include the
device model, operating system version, and any other relevant information.
validations:
required:false
- type:input
attributes:
label:What version of the app are you using?
description:|
You can easily find this information by visting the Settings screen in the app, and tapping on the version info
at the bottom of the screen. All the relevant information will be copied to your clipboard, and you will be
able to share it here.
validations:
required:true
- type:textarea
attributes:
label:Additional Information
description:|
Please provide any additional information that you think may be helpful in identifying the issue you are
experiencing. This can include any error messages, logs, or other information that you think may be relevant.
description:"Suggest an idea for the Bluesky app."
labels:["feature-request"]
body:
- type:markdown
attributes:
value:|
Thanks for submitting a feature request! Before you submit this request, please make sure you've searched for similar requests that are already open and being tracked. If you find an open request that seems relevant to yours, it is best to leave a response there with your information instead of opening a new request, since it helps to consolidate the info in one place.
- type:textarea
attributes:
label:Describe the Feature
description:|
Please provide a detailed description of the feature you would like to see implemented in the app. The more
information you provide, the easier it will be for us to understand the feature you are requesting and to
implement it in a timely manner.
validations:
required:true
- type:textarea
attributes:
label:Attachments
description:|
If helpful, provide some images or videos of similar features in other apps that you think would be helpful
for us to understand the feature you are requesting, or places within the app that you think the feature belongs
in or is missing from.
validations:
required:false
- type:textarea
attributes:
label:Describe Alternatives
description:|
If there are any alternative solutions or features that you think would be helpful to implement in place of the
feature you are requesting, please provide a description of those as well.
validations:
required:false
- type:textarea
attributes:
label:Additional Context
description:|
If there is any additional context or information that you think would be helpful for us to know about the
feature you are requesting, please provide that information here.
This is a [React Native](https://reactnative.dev/) application, written in the TypeScript programming language. It builds on the `atproto` TypeScript packages (like [`@atproto/api`](https://www.npmjs.com/package/@atproto/api)), code for which is also on open source, but in [a different git repository](https://github.com/bluesky-social/atproto).
This is a [React Native](https://reactnative.dev/) application, written in the TypeScript programming language. It builds on the `atproto` TypeScript packages (like [`@atproto/api`](https://www.npmjs.com/package/@atproto/api)), code for which is also open source, but in [a different git repository](https://github.com/bluesky-social/atproto).
There is a small amount of Go language source code (in `./bskyweb/`), for a web service that returns the React Native Web application.
@@ -42,10 +42,10 @@ The Bluesky Social application encompasses a set of schemas and APIs built in th
- Open an issue and give some time for discussion before submitting a PR.
- Stay away from PRs like...
- Changing "Post" to "Skeet."
- Refactoring the codebase, eg to replace mobx with redux or something.
- Refactoring the codebase, e.g., to replace MobX with Redux or something.
- Adding entirely new features without prior discussion.
Remember, we serve a wide community of users. Our daytoday involves us constantly asking "which top priority is our top priority." If you submit well-written PRs that solve problems concisely, that's an awesome contribution. Otherwise, as much as we'd love to accept your ideas and contributions, we really don't have the bandwidth. That's what forking is for!
Remember, we serve a wide community of users. Our day-to-day involves us constantly asking "which top priority is our top priority." If you submit well-written PRs that solve problems concisely, that's an awesome contribution. Otherwise, as much as we'd love to accept your ideas and contributions, we really don't have the bandwidth. That's what forking is for!
## Forking guidelines
@@ -63,7 +63,7 @@ If you discover any security issues, please send an email to security@bsky.app.
## Are you a developer interested in building on atproto?
Bluesky is an open social network built on the AT Protocol, a flexible technology that will never lock developers out of the ecosystems that they help build. With atproto, third-party can be as seamless as first-party through custom feeds, federated services, clients, and more.
Bluesky is an open social network built on the AT Protocol, a flexible technology that will never lock developers out of the ecosystems that they help build. With atproto, third-party integration can be as seamless as first-party through custom feeds, federated services, clients, and more.
it('extracts title and description from a Tiktok HTML page',()=>{
constinput=tiktokHtml
constexpectedOutput={
title:
'Coca-Cola and Mentos! Super Reaction! #cocacola #mentos #reaction #bal... | TikTok',
description:
'5.5M Likes, 20.8K Comments. TikTok video from Power Vision Tests (@_powervision_): "Coca-Cola and Mentos! Super Reaction! #cocacola #mentos #reaction #balloon #sciencemoment #scienceexperiment #experiment #test #amazing #pvexp". оригинальный звук - Power Vision Tests.',
'Clips channel: https://www.youtube.com/channel/UC4EQHfzIbkL_Skit_iKt1aA\n\nTwitter: https://twitter.com/MoistCr1TiKaL\n\nInstagram: https://www.instagram.com/bigmoistcr1tikal/?hl=en\n\nTwitch: https://www.twitch.tv/moistcr1tikal\n\nSnapchat: Hugecharles\n\nTik Tok: Hugecharles\n\nI don't have any other public accounts.',
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.