diff --git a/.github/workflows/pull-request-commit.yml b/.github/workflows/pull-request-commit.yml index cb30fc3924..640d77845f 100644 --- a/.github/workflows/pull-request-commit.yml +++ b/.github/workflows/pull-request-commit.yml @@ -134,6 +134,7 @@ jobs: - name: 📷 Check fingerprint and install dependencies id: fingerprint + timeout-minutes: 5 uses: bluesky-social/github-actions/fingerprint-native@b5556913e4aef3964cfd5936d0add3fc0d809bdb # v0.1.0 with: profile: pull-request @@ -168,11 +169,13 @@ jobs: env: GH_TOKEN: ${{ github.token }} PR_NUMBER: ${{ github.event.pull_request.number }} - run: gh pr edit "$PR_NUMBER" --add-label "bot: fingerprint changed" || true + run: | + gh pr edit "$PR_NUMBER" --add-label "bot: fingerprint changed" || true - name: 🏷️ Remove fingerprint changed label if: ${{ !steps.fingerprint.outputs.includes-changes }} env: GH_TOKEN: ${{ github.token }} PR_NUMBER: ${{ github.event.pull_request.number }} - run: gh pr edit "$PR_NUMBER" --remove-label "bot: fingerprint changed" || true + run: | + gh pr edit "$PR_NUMBER" --remove-label "bot: fingerprint changed" || true diff --git a/CLAUDE.md b/CLAUDE.md index ea7c1fc9f7..3a2c589dfc 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -10,7 +10,7 @@ Bluesky Social is a cross-platform social media application built with React Nat - React 19.1 - React Native 0.81 with Expo 54 -- TypeScript 6 +- TypeScript 7 - React Navigation 7 for routing - TanStack Query (React Query) for data fetching - Lingui 5 for internationalization @@ -32,6 +32,7 @@ pnpm ios # Run on iOS pnpm test # Run Jest tests pnpm lint # Run ESLint pnpm typecheck # Run TypeScript type checking +pnpm prettier # Run Prettier for code formatting # Internationalization # DO NOT run these commands - extraction and compilation are handled by CI diff --git a/eslint-suppressions.json b/eslint-suppressions.json index d8140cdf54..c818b780f6 100644 --- a/eslint-suppressions.json +++ b/eslint-suppressions.json @@ -1940,15 +1940,6 @@ } }, "src/view/com/composer/Composer.tsx": { - "@typescript-eslint/no-explicit-any": { - "count": 2 - }, - "@typescript-eslint/no-misused-promises": { - "count": 4 - }, - "@typescript-eslint/no-unsafe-member-access": { - "count": 2 - }, "react-hooks/immutability": { "count": 2 }, diff --git a/src/features/liveNow/components/EditLiveDialog.tsx b/src/features/liveNow/components/EditLiveDialog.tsx index 6d95d43859..cf913541a1 100644 --- a/src/features/liveNow/components/EditLiveDialog.tsx +++ b/src/features/liveNow/components/EditLiveDialog.tsx @@ -1,10 +1,6 @@ import {useMemo, useState} from 'react' import {View} from 'react-native' -import { - type AppBskyActorDefs, - AppBskyActorStatus, - type AppBskyEmbedExternal, -} from '@atproto/api' +import {type AppBskyActorDefs, type AppBskyEmbedExternal} from '@atproto/api' import {msg} from '@lingui/core/macro' import {useLingui} from '@lingui/react' import {Trans} from '@lingui/react/macro' @@ -24,6 +20,7 @@ import {Loader} from '#/components/Loader' import {Text} from '#/components/Typography' import { displayDuration, + getValidLiveStatusRecord, useLiveLinkMetaQuery, useRemoveLiveStatusMutation, useUpsertLiveStatusMutation, @@ -74,14 +71,10 @@ function DialogInner({ error: linkMetaError, } = useLiveLinkMetaQuery(debouncedUrl) - const record = useMemo(() => { - if (!AppBskyActorStatus.isRecord(status.record)) return null - const validation = AppBskyActorStatus.validateRecord(status.record) - if (validation.success) { - return validation.value - } - return null - }, [status]) + const record = useMemo( + () => getValidLiveStatusRecord(status.record), + [status], + ) const { mutate: goLive, diff --git a/src/features/liveNow/components/GoLiveDialog.tsx b/src/features/liveNow/components/GoLiveDialog.tsx index b22585ab1e..72438fdddc 100644 --- a/src/features/liveNow/components/GoLiveDialog.tsx +++ b/src/features/liveNow/components/GoLiveDialog.tsx @@ -20,7 +20,9 @@ import * as Select from '#/components/Select' import {Text} from '#/components/Typography' import { displayDuration, + getLiveLinkFromStatusRecord, getLiveServiceNames, + useActorStatus, useLiveLinkMetaQuery, useLiveNowConfig, useUpsertLiveStatusMutation, @@ -50,16 +52,20 @@ function DialogInner({profile}: {profile: bsky.profile.AnyProfileView}) { const control = Dialog.useDialogContext() const {_, i18n} = useLingui() const t = useTheme() - const [liveLink, setLiveLink] = useState('') const [liveLinkError, setLiveLinkError] = useState('') const [duration, setDuration] = useState(60) const moderationOpts = useModerationOpts() const tick = useTickEveryMinute() const liveNowConfig = useLiveNowConfig() + const status = useActorStatus(profile) const {formatted: allowedServices} = getLiveServiceNames( liveNowConfig.currentAccountAllowedHosts, ) + const [liveLink, setLiveLink] = useState(() => + getLiveLinkFromStatusRecord(status.record), + ) + const time = useCallback( (offset: number) => { void tick diff --git a/src/features/liveNow/utils.ts b/src/features/liveNow/utils.ts index f2a7c8c62f..a7326cd8e9 100644 --- a/src/features/liveNow/utils.ts +++ b/src/features/liveNow/utils.ts @@ -1,7 +1,32 @@ +import {AppBskyActorStatus, AppBskyEmbedExternal} from '@atproto/api' import {type I18n} from '@lingui/core' import {plural} from '@lingui/core/macro' import psl from 'psl' +/** + * Validates a raw status record and returns the typed record, or null if the + * value is not a valid `app.bsky.actor.status` record. + */ +export function getValidLiveStatusRecord( + statusRecord: unknown, +): AppBskyActorStatus.Record | null { + if (!AppBskyActorStatus.isRecord(statusRecord)) return null + const validation = AppBskyActorStatus.validateRecord(statusRecord) + if (!validation.success) return null + return validation.value +} + +/** + * Extracts the external link URI from a status record, if present. Returns an + * empty string when the record is invalid or has no external embed. + */ +export function getLiveLinkFromStatusRecord(statusRecord: unknown): string { + const record = getValidLiveStatusRecord(statusRecord) + if (!record) return '' + if (!AppBskyEmbedExternal.isMain(record.embed)) return '' + return record.embed.external.uri +} + export function displayDuration(i18n: I18n, durationInMinutes: number) { const roundedDurationInMinutes = Math.round(durationInMinutes) const hours = Math.floor(roundedDurationInMinutes / 60) diff --git a/src/locale/locales/en/messages.po b/src/locale/locales/en/messages.po index 17eba11403..98b89ab69a 100644 --- a/src/locale/locales/en/messages.po +++ b/src/locale/locales/en/messages.po @@ -19,7 +19,7 @@ msgid "\"{interestsDisplayName}\" category (active)" msgstr "" #. A reply summary in chat -#: src/components/dms/MessageItem.tsx:862 +#: src/components/dms/MessageItem.tsx:882 msgid "(blocked message hidden)" msgstr "(blocked message hidden)" @@ -34,7 +34,7 @@ msgid "(contains embedded content)" msgstr "" #. A reply summary in chat -#: src/components/dms/MessageItem.tsx:870 +#: src/components/dms/MessageItem.tsx:896 msgid "(deleted message)" msgstr "(deleted message)" @@ -48,6 +48,11 @@ msgstr "(disabled chat invite link)" msgid "(invalid chat invite link)" msgstr "(invalid chat invite link)" +#. A reply summary in chat +#: src/components/dms/MessageItem.tsx:890 +msgid "(message sent before you joined)" +msgstr "(message sent before you joined)" + #: src/screens/Settings/AccountSettings.tsx:76 msgid "(no email)" msgstr "" @@ -641,11 +646,11 @@ msgstr "" msgid "{handle} can’t be messaged" msgstr "{handle} can’t be messaged" -#: src/features/liveNow/utils.ts:15 +#: src/features/liveNow/utils.ts:40 msgid "{hours, plural, one {# hour {minutesString}} other {# hours {minutesString}}}" msgstr "" -#: src/features/liveNow/utils.ts:19 +#: src/features/liveNow/utils.ts:44 msgid "{hours, plural, one {# hour} other {# hours}}" msgstr "" @@ -685,7 +690,7 @@ msgstr "" msgid "{memberCount}/{memberLimit}" msgstr "{memberCount}/{memberLimit}" -#: src/features/liveNow/utils.ts:10 +#: src/features/liveNow/utils.ts:35 msgid "{minutes, plural, one {# minute} other {# minutes}}" msgstr "" @@ -728,15 +733,15 @@ msgstr "" msgid "{rank}." msgstr "" -#: src/components/dms/MessageItem.tsx:814 +#: src/components/dms/MessageItem.tsx:791 msgid "{replierDisplayName} replied" msgstr "{replierDisplayName} replied" -#: src/components/dms/MessageItem.tsx:810 +#: src/components/dms/MessageItem.tsx:790 msgid "{replierDisplayName} replied to {originalName}" msgstr "{replierDisplayName} replied to {originalName}" -#: src/components/dms/MessageItem.tsx:808 +#: src/components/dms/MessageItem.tsx:788 msgid "{replierDisplayName} replied to you" msgstr "{replierDisplayName} replied to you" @@ -931,6 +936,10 @@ msgstr "" msgid "A new form of verification" msgstr "" +#: src/components/dms/MessageItem.tsx:801 +msgid "A reply to a message sent before you joined" +msgstr "A reply to a message sent before you joined" + #. Contains a post that originally appeared in English. Consider translating the post text if it makes sense in your language, and noting that the post was translated from English. #: src/components/dialogs/nuxs/LiveNowBetaDialog.tsx:147 msgid "A screenshot of a post from @esb.lol, showing the user is currently livestreaming content on Twitch. The post reads: \"Hello! I'm live on Twitch, and I'm testing Bluesky's latest feature too!\"" @@ -1064,8 +1073,8 @@ msgid "Account removed from quick access" msgstr "" #: src/screens/Messages/ConversationSettings/MemberMenu.tsx:109 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:91 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:315 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:87 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:295 #: src/view/com/profile/ProfileMenu.tsx:169 msgctxt "toast" msgid "Account unblocked" @@ -1087,8 +1096,8 @@ msgid "Accounts with a scalloped blue check mark <0><1/> can verify others. msgstr "" #: src/lib/hooks/useNotificationHandler.ts:214 -#: src/screens/Settings/NotificationSettings/index.tsx:214 -#: src/screens/Settings/NotificationSettings/index.tsx:353 +#: src/screens/Settings/NotificationSettings/index.tsx:226 +#: src/screens/Settings/NotificationSettings/index.tsx:365 msgid "Activity from others" msgstr "" @@ -1116,7 +1125,7 @@ msgstr "" msgid "Add a content warning" msgstr "" -#: src/features/liveNow/components/GoLiveDialog.tsx:108 +#: src/features/liveNow/components/GoLiveDialog.tsx:114 msgid "Add a temporary live status to your profile. When someone clicks on your avatar, they’ll see information about your live event." msgstr "" @@ -1144,7 +1153,7 @@ msgstr "" msgid "Add alt text (optional)" msgstr "" -#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:449 +#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:459 msgid "Add an additional search filter" msgstr "Add an additional search filter" @@ -1155,11 +1164,11 @@ msgstr "Add an additional search filter" msgid "Add another account" msgstr "" -#: src/view/com/composer/Composer.tsx:1605 +#: src/view/com/composer/Composer.tsx:1595 msgid "Add another post" msgstr "" -#: src/view/com/composer/Composer.tsx:2271 +#: src/view/com/composer/Composer.tsx:2261 msgid "Add another post to thread" msgstr "" @@ -1181,7 +1190,7 @@ msgstr "Add automation label to account" msgid "Add emoji reaction" msgstr "" -#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:457 +#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:467 msgid "Add filter" msgstr "Add filter" @@ -1189,7 +1198,7 @@ msgstr "Add filter" msgid "Add group chat members" msgstr "Add group chat members" -#: src/view/com/feeds/ComposerPrompt.tsx:224 +#: src/view/com/feeds/ComposerPrompt.tsx:223 msgid "Add image" msgstr "" @@ -1357,7 +1366,7 @@ msgid "Advanced" msgstr "" #: src/screens/Search/components/AdvancedSearchDialog/index.tsx:76 -#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:252 +#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:270 msgid "Advanced search" msgstr "Advanced search" @@ -1417,7 +1426,7 @@ msgstr "" msgid "All languages will be shown in your feeds." msgstr "" -#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:259 +#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:277 msgid "All of these words" msgstr "All of these words" @@ -1548,7 +1557,7 @@ msgstr "" msgid "An error occurred" msgstr "" -#: src/view/com/composer/state/video.ts:432 +#: src/view/com/composer/state/video.ts:433 msgid "An error occurred while compressing the video." msgstr "" @@ -1594,11 +1603,11 @@ msgstr "" msgid "An error occurred while trying to follow all" msgstr "" -#: src/view/com/composer/state/video.ts:484 +#: src/view/com/composer/state/video.ts:485 msgid "An error occurred while uploading the video. {message}" msgstr "" -#: src/view/com/composer/state/video.ts:476 +#: src/view/com/composer/state/video.ts:477 msgid "An error occurred while uploading the video. Please check your internet connection and try again." msgstr "" @@ -1660,10 +1669,6 @@ msgstr "" msgid "An mockup of a iPhone showing the Bluesky app open to the profile of a verified user with a blue checkmark next to their display name." msgstr "" -#: src/features/liveEvents/components/LiveEventFeedOptionsMenu.tsx:165 -msgid "An unknown error occurred." -msgstr "" - #: src/components/moderation/ModerationDetailsDialog.tsx:138 #: src/lib/moderation/useModerationCauseDescription.ts:145 msgid "an unknown labeler" @@ -1903,7 +1908,7 @@ msgstr "" msgid "Are you sure you want to rescind your request to join {0}?" msgstr "Are you sure you want to rescind your request to join {0}?" -#: src/view/com/composer/Composer.tsx:1741 +#: src/view/com/composer/Composer.tsx:1731 msgid "Are you sure you'd like to discard this post?" msgstr "" @@ -2080,7 +2085,7 @@ msgstr "" #: src/components/moderation/BlockDialog.tsx:192 #: src/components/moderation/BlockDialog.tsx:211 #: src/screens/Messages/ConversationSettings/MemberMenu.tsx:227 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:210 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:190 msgid "Block" msgstr "" @@ -2199,11 +2204,6 @@ msgstr "bloomscrolling booksky" msgid "Bluesky" msgstr "" -#. Advanced search: Example of an “all of these words” search -#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:264 -msgid "bluesky atproto" -msgstr "bluesky atproto" - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:657 msgid "Bluesky cannot confirm the authenticity of the claimed date." msgstr "" @@ -2345,7 +2345,7 @@ msgstr "" msgid "Business" msgstr "" -#: src/screens/Bookmarks/index.tsx:302 +#: src/screens/Bookmarks.tsx:295 msgid "Button to go back to the home timeline" msgstr "" @@ -2435,10 +2435,8 @@ msgstr "Camera access needed" #: src/components/Prompt.tsx:154 #: src/components/SendErrorReportDialog.tsx:98 #: src/components/SendErrorReportDialog.tsx:102 -#: src/features/liveEvents/components/LiveEventFeedOptionsMenu.tsx:152 -#: src/features/liveEvents/components/LiveEventFeedOptionsMenu.tsx:157 -#: src/features/liveNow/components/GoLiveDialog.tsx:248 #: src/features/liveNow/components/GoLiveDialog.tsx:254 +#: src/features/liveNow/components/GoLiveDialog.tsx:260 #: src/lib/media/picker.tsx:38 #: src/screens/Deactivated.tsx:150 #: src/screens/Messages/components/InviteLinkDialog.tsx:500 @@ -2449,8 +2447,8 @@ msgstr "Camera access needed" #: src/screens/Messages/ConversationSettings/prompts.tsx:180 #: src/screens/Profile/Header/EditProfileDialog.tsx:215 #: src/screens/Profile/Header/EditProfileDialog.tsx:223 -#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:216 -#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:223 +#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:234 +#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:241 #: src/screens/Settings/AppIconSettings/index.tsx:42 #: src/screens/Settings/AppIconSettings/index.tsx:228 #: src/screens/Settings/components/ChangeHandleDialog.tsx:80 @@ -2460,8 +2458,8 @@ msgstr "Camera access needed" #: src/screens/Settings/Settings.tsx:300 #: src/screens/Takendown.tsx:102 #: src/screens/Takendown.tsx:105 +#: src/view/com/composer/Composer.tsx:1809 #: src/view/com/composer/Composer.tsx:1819 -#: src/view/com/composer/Composer.tsx:1829 #: src/view/com/composer/photos/EditImageDialog.web.tsx:44 #: src/view/com/composer/photos/EditImageDialog.web.tsx:53 #: src/view/shell/desktop/LeftNav.tsx:228 @@ -2480,7 +2478,7 @@ msgstr "" msgid "Cancel reply" msgstr "Cancel reply" -#: src/screens/Search/Shell.tsx:527 +#: src/screens/Search/Shell.tsx:565 msgid "Cancel search" msgstr "" @@ -2508,6 +2506,11 @@ msgstr "carousel" msgid "Cashtag {tag}" msgstr "" +#. Advanced search: Example of an “all of these words” search +#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:159 +msgid "cats dogs" +msgstr "cats dogs" + #: src/components/Post/Translated/index.tsx:439 #: src/screens/Settings/components/Email2FAToggle.tsx:31 msgid "Change" @@ -2897,8 +2900,8 @@ msgstr "" #: src/components/WhoCanReply.tsx:236 #: src/components/WhoCanReply.tsx:243 #: src/features/gifPicker/components/GifPickerErrorBoundary.tsx:45 -#: src/features/liveNow/components/EditLiveDialog.tsx:217 -#: src/features/liveNow/components/EditLiveDialog.tsx:223 +#: src/features/liveNow/components/EditLiveDialog.tsx:210 +#: src/features/liveNow/components/EditLiveDialog.tsx:216 #: src/screens/Messages/components/InviteLinkDialog.tsx:524 #: src/screens/Messages/components/InviteLinkDialog.tsx:529 #: src/screens/Settings/components/ChangePasswordDialog.tsx:288 @@ -2979,7 +2982,7 @@ msgstr "" msgid "Closes password update alert" msgstr "" -#: src/view/com/composer/Composer.tsx:1827 +#: src/view/com/composer/Composer.tsx:1817 msgid "Closes post composer and discards post draft" msgstr "" @@ -3033,7 +3036,7 @@ msgid "Compose new post" msgstr "" #. placeholder {0}: MAX_GRAPHEME_LENGTH || 0 -#: src/view/com/composer/Composer.tsx:1703 +#: src/view/com/composer/Composer.tsx:1693 msgid "Compose posts up to {0, plural, other {# characters}} in length" msgstr "" @@ -3041,11 +3044,11 @@ msgstr "" msgid "Compose reply" msgstr "" -#: src/view/com/composer/Composer.tsx:2668 +#: src/view/com/composer/Composer.tsx:2665 msgid "Compressing GIF..." msgstr "" -#: src/view/com/composer/Composer.tsx:2670 +#: src/view/com/composer/Composer.tsx:2667 msgid "Compressing video..." msgstr "" @@ -3053,10 +3056,6 @@ msgstr "" msgid "Configure content filtering setting for category: {name}" msgstr "" -#: src/features/liveEvents/components/LiveEventFeedOptionsMenu.tsx:37 -msgid "Configure live event banner" -msgstr "" - #: src/components/moderation/LabelPreference.tsx:254 msgid "Configured in <0>moderation settings." msgstr "" @@ -3239,7 +3238,7 @@ msgstr "Conversation not found." msgid "Copied build version to clipboard" msgstr "" -#: src/screens/Search/Shell.tsx:458 +#: src/screens/Search/Shell.tsx:498 msgid "Copied link to clipboard" msgstr "Copied link to clipboard" @@ -3472,8 +3471,8 @@ msgstr "Couldn’t load GIFs" msgid "Country code" msgstr "" -#. Advanced search: Example of an “none of these words” search -#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:298 +#. Advanced search: Example of a “none of these words” search +#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:163 msgid "cows pigs" msgstr "cows pigs" @@ -3677,10 +3676,6 @@ msgstr "" msgid "Debug Moderation" msgstr "" -#: src/view/screens/Debug.tsx:75 -msgid "Debug panel" -msgstr "" - #: src/view/com/composer/select-language/SuggestedLanguage.tsx:469 msgid "Decline this language suggestion" msgstr "Decline this language suggestion" @@ -3769,7 +3764,7 @@ msgstr "" #: src/components/PostControls/PostMenu/PostMenuItems.tsx:796 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:798 -#: src/view/com/composer/Composer.tsx:1715 +#: src/view/com/composer/Composer.tsx:1705 msgid "Delete post" msgstr "" @@ -3859,7 +3854,7 @@ msgstr "Device failed to translate :(" msgid "Dialog: adjust who can interact with this post" msgstr "" -#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:247 +#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:265 msgid "Dialog: Set advanced search options" msgstr "Dialog: Set advanced search options" @@ -3920,9 +3915,9 @@ msgstr "" #: src/components/dialogs/lists/CreateOrEditListDialog.tsx:101 #: src/screens/Profile/Header/EditProfileDialog.tsx:79 -#: src/view/com/composer/Composer.tsx:1495 -#: src/view/com/composer/Composer.tsx:1539 -#: src/view/com/composer/Composer.tsx:1748 +#: src/view/com/composer/Composer.tsx:1485 +#: src/view/com/composer/Composer.tsx:1529 +#: src/view/com/composer/Composer.tsx:1738 #: src/view/com/composer/drafts/DraftItem.tsx:242 #: src/view/com/composer/drafts/DraftsButton.tsx:131 msgid "Discard" @@ -3933,14 +3928,14 @@ msgstr "" msgid "Discard changes?" msgstr "" -#: src/view/com/composer/Composer.tsx:1493 +#: src/view/com/composer/Composer.tsx:1483 #: src/view/com/composer/drafts/DraftItem.tsx:239 #: src/view/com/composer/drafts/DraftsButton.tsx:98 msgid "Discard draft?" msgstr "" -#: src/view/com/composer/Composer.tsx:1510 -#: src/view/com/composer/Composer.tsx:1740 +#: src/view/com/composer/Composer.tsx:1500 +#: src/view/com/composer/Composer.tsx:1730 msgid "Discard post?" msgstr "" @@ -3978,7 +3973,7 @@ msgstr "" msgid "Dismiss banner" msgstr "" -#: src/view/com/composer/Composer.tsx:2589 +#: src/view/com/composer/Composer.tsx:2586 msgid "Dismiss error" msgstr "" @@ -4291,12 +4286,12 @@ msgstr "" #: src/screens/Profile/Header/EditProfileDialog.tsx:265 #: src/screens/Profile/Header/EditProfileDialog.tsx:271 #: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:299 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:350 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:330 msgid "Edit profile" msgstr "" #: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:302 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:352 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:332 msgid "Edit Profile" msgstr "" @@ -4422,8 +4417,8 @@ msgstr "" msgid "Enable notifications for an account by visiting their profile and pressing the <0>bell icon <1/>." msgstr "" -#: src/screens/Settings/NotificationSettings/index.tsx:124 -#: src/screens/Settings/NotificationSettings/index.tsx:128 +#: src/screens/Settings/NotificationSettings/index.tsx:136 +#: src/screens/Settings/NotificationSettings/index.tsx:140 msgid "Enable push notifications" msgstr "" @@ -4522,7 +4517,7 @@ msgstr "" msgid "Entertainment" msgstr "" -#: src/view/com/composer/Composer.tsx:2688 +#: src/view/com/composer/Composer.tsx:2685 #: src/view/com/util/error/ErrorScreen.tsx:40 msgid "Error" msgstr "" @@ -4581,8 +4576,8 @@ msgctxt "allow messages from" msgid "Everyone" msgstr "Everyone" -#: src/screens/Settings/NotificationSettings/index.tsx:287 -#: src/screens/Settings/NotificationSettings/index.tsx:389 +#: src/screens/Settings/NotificationSettings/index.tsx:299 +#: src/screens/Settings/NotificationSettings/index.tsx:401 msgid "Everything else" msgstr "" @@ -4655,7 +4650,7 @@ msgstr "" #. placeholder {0}: displayDuration(i18n, minutesUntilExpiry) #. placeholder {1}: i18n.date(expiryDateTime, { hour: 'numeric', minute: '2-digit', hour12: true, }) -#: src/features/liveNow/components/EditLiveDialog.tsx:132 +#: src/features/liveNow/components/EditLiveDialog.tsx:125 msgid "Expires in {0} at {1}" msgstr "" @@ -4669,7 +4664,7 @@ msgid "Explicit sexual images." msgstr "" #: src/Navigation.tsx:751 -#: src/screens/Search/Shell.tsx:495 +#: src/screens/Search/Shell.tsx:535 #: src/view/shell/desktop/LeftNav.tsx:677 #: src/view/shell/Drawer.tsx:473 msgid "Explore" @@ -4752,7 +4747,7 @@ msgstr "" #: src/components/Lightbox/Lightbox.web.tsx:302 #: src/features/inviteFriends/InviteFriendsDialogInner.tsx:130 -#: src/screens/Search/Shell.tsx:459 +#: src/screens/Search/Shell.tsx:499 msgid "Failed to copy link" msgstr "Failed to copy link" @@ -4860,9 +4855,9 @@ msgstr "" #: src/components/dialogs/NotificationSettingsDialog.tsx:85 #: src/screens/Messages/Settings.tsx:369 -#: src/screens/Settings/NotificationSettings/index.tsx:137 -#: src/screens/Settings/NotificationSettings/index.tsx:256 -#: src/screens/Settings/NotificationSettings/index.tsx:273 +#: src/screens/Settings/NotificationSettings/index.tsx:149 +#: src/screens/Settings/NotificationSettings/index.tsx:268 +#: src/screens/Settings/NotificationSettings/index.tsx:285 msgid "Failed to load notification settings." msgstr "" @@ -4961,7 +4956,7 @@ msgstr "Failed to rescind your request. Please try again." msgid "Failed to resolve location. Please try again." msgstr "" -#: src/view/com/composer/Composer.tsx:721 +#: src/view/com/composer/Composer.tsx:719 msgid "Failed to save draft" msgstr "" @@ -5233,7 +5228,7 @@ msgstr "" msgid "Find people you know" msgstr "Find people you know" -#: src/screens/Search/Shell.tsx:701 +#: src/screens/Search/Shell.tsx:742 msgid "Find posts, users, and feeds on Bluesky" msgstr "" @@ -5287,7 +5282,7 @@ msgstr "Focus the search field" #: src/components/ProfileHoverCard/index.web.tsx:506 #: src/screens/Messages/ConversationSettings/Member.tsx:170 #: src/screens/PostThread/components/ThreadItemAnchorFollowButton.tsx:157 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:429 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:409 #: src/screens/VideoFeed/index.tsx:866 #: src/view/com/notifications/NotificationFeedItem.tsx:874 #: src/view/com/notifications/NotificationFeedItem.tsx:881 @@ -5296,7 +5291,7 @@ msgstr "" #. placeholder {0}: profile.handle #: src/screens/PostThread/components/ThreadItemAnchorFollowButton.tsx:144 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:417 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:397 msgid "Follow {0}" msgstr "" @@ -5344,7 +5339,7 @@ msgstr "" #. User is not following this account, click to follow back #: src/components/ProfileCard.tsx:542 #: src/screens/PostThread/components/ThreadItemAnchorFollowButton.tsx:155 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:427 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:407 #: src/view/com/notifications/NotificationFeedItem.tsx:874 #: src/view/com/notifications/NotificationFeedItem.tsx:881 msgid "Follow back" @@ -5402,7 +5397,7 @@ msgstr "" #: src/components/ProfileHoverCard/index.web.tsx:494 #: src/components/ProfileHoverCard/index.web.tsx:505 #: src/screens/PostThread/components/ThreadItemAnchorFollowButton.tsx:160 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:425 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:405 #: src/screens/VideoFeed/index.tsx:864 #: src/view/com/notifications/NotificationFeedItem.tsx:852 #: src/view/com/notifications/NotificationFeedItem.tsx:869 @@ -5419,7 +5414,7 @@ msgstr "" #. placeholder {0}: sanitizeDisplayName( profile.displayName || profile.handle, ) #. placeholder {0}: sanitizeDisplayName( profile.displayName || profile.handle, moderation.ui('displayName'), ) #: src/components/ProfileCard.tsx:498 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:267 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:247 #: src/view/com/notifications/NotificationFeedItem.tsx:801 msgid "Following {0}" msgstr "" @@ -5513,12 +5508,16 @@ msgstr "Four message bubbles representing a group chat. First message: \"Did you msgid "Free your feed" msgstr "" -#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:420 +#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:430 #: src/screens/Settings/NotificationSettings/components/PreferenceControls.tsx:159 msgid "From" msgstr "" -#: src/screens/Hashtag.tsx:124 +#: src/screens/Hashtag.tsx:125 +msgid "From {sanitizedAuthor}" +msgstr "From {sanitizedAuthor}" + +#: src/screens/Hashtag.tsx:126 msgid "From @{sanitizedAuthor}" msgstr "" @@ -5572,39 +5571,39 @@ msgstr "" msgid "Get help" msgstr "" -#: src/screens/Settings/NotificationSettings/index.tsx:391 +#: src/screens/Settings/NotificationSettings/index.tsx:403 msgid "Get notifications for starter pack joins, verification, and other activity." msgstr "Get notifications for starter pack joins, verification, and other activity." -#: src/screens/Settings/NotificationSettings/index.tsx:313 +#: src/screens/Settings/NotificationSettings/index.tsx:325 msgid "Get notifications when people follow you." msgstr "" -#: src/screens/Settings/NotificationSettings/index.tsx:305 +#: src/screens/Settings/NotificationSettings/index.tsx:317 msgid "Get notifications when people like your posts." msgstr "" -#: src/screens/Settings/NotificationSettings/index.tsx:368 +#: src/screens/Settings/NotificationSettings/index.tsx:380 msgid "Get notifications when people like your reposts." msgstr "Get notifications when people like your reposts." -#: src/screens/Settings/NotificationSettings/index.tsx:329 +#: src/screens/Settings/NotificationSettings/index.tsx:341 msgid "Get notifications when people mention you." msgstr "" -#: src/screens/Settings/NotificationSettings/index.tsx:337 +#: src/screens/Settings/NotificationSettings/index.tsx:349 msgid "Get notifications when people quote your posts." msgstr "" -#: src/screens/Settings/NotificationSettings/index.tsx:321 +#: src/screens/Settings/NotificationSettings/index.tsx:333 msgid "Get notifications when people reply to your posts." msgstr "" -#: src/screens/Settings/NotificationSettings/index.tsx:346 +#: src/screens/Settings/NotificationSettings/index.tsx:358 msgid "Get notifications when people repost your posts." msgstr "" -#: src/screens/Settings/NotificationSettings/index.tsx:377 +#: src/screens/Settings/NotificationSettings/index.tsx:389 msgid "Get notifications when people repost your reposts." msgstr "Get notifications when people repost your reposts." @@ -5616,7 +5615,7 @@ msgstr "Get notifications when people send you message requests." msgid "Get notifications when people send you messages." msgstr "Get notifications when people send you messages." -#: src/screens/Settings/NotificationSettings/index.tsx:355 +#: src/screens/Settings/NotificationSettings/index.tsx:367 msgid "Get notifications when there's activity on posts you're subscribed to." msgstr "Get notifications when there's activity on posts you're subscribed to." @@ -5652,7 +5651,7 @@ msgstr "" msgid "GIF" msgstr "" -#: src/view/com/composer/Composer.tsx:2693 +#: src/view/com/composer/Composer.tsx:2690 msgid "GIF uploaded" msgstr "" @@ -5698,28 +5697,22 @@ msgstr "" msgid "Go back to previous step" msgstr "" -#: src/screens/Bookmarks/index.tsx:303 +#: src/screens/Bookmarks.tsx:296 #: src/view/screens/NotFound.tsx:51 #: src/view/screens/NotFound.tsx:52 #: src/view/screens/NotFound.tsx:57 msgid "Go home" msgstr "" -#: src/screens/Bookmarks/components/EmptyState.tsx:44 -#: src/screens/Bookmarks/components/EmptyState.tsx:52 -msgctxt "Button to go back to the home timeline" -msgid "Go home" -msgstr "" - #: src/view/com/profile/ProfileMenu.tsx:365 #: src/view/com/profile/ProfileMenu.tsx:386 msgid "Go live" msgstr "" -#: src/features/liveNow/components/GoLiveDialog.tsx:100 -#: src/features/liveNow/components/GoLiveDialog.tsx:105 -#: src/features/liveNow/components/GoLiveDialog.tsx:233 -#: src/features/liveNow/components/GoLiveDialog.tsx:242 +#: src/features/liveNow/components/GoLiveDialog.tsx:106 +#: src/features/liveNow/components/GoLiveDialog.tsx:111 +#: src/features/liveNow/components/GoLiveDialog.tsx:239 +#: src/features/liveNow/components/GoLiveDialog.tsx:248 msgid "Go Live" msgstr "" @@ -5728,7 +5721,7 @@ msgstr "" msgid "Go live (disabled)" msgstr "" -#: src/features/liveNow/components/GoLiveDialog.tsx:175 +#: src/features/liveNow/components/GoLiveDialog.tsx:181 msgid "Go live for" msgstr "" @@ -6019,11 +6012,6 @@ msgctxt "action" msgid "Hide" msgstr "" -#: src/features/liveEvents/components/LiveEventFeedOptionsMenu.tsx:139 -#: src/features/liveEvents/components/LiveEventFeedOptionsMenu.tsx:146 -msgid "Hide all events" -msgstr "" - #: src/components/dialogs/Embed.tsx:124 msgid "Hide customization options" msgstr "" @@ -6055,11 +6043,6 @@ msgstr "" msgid "Hide this card" msgstr "" -#: src/features/liveEvents/components/LiveEventFeedOptionsMenu.tsx:127 -#: src/features/liveEvents/components/LiveEventFeedOptionsMenu.tsx:134 -msgid "Hide this event" -msgstr "" - #: src/components/PostControls/PostMenu/PostMenuItems.tsx:817 msgid "Hide this post?" msgstr "" @@ -6139,7 +6122,7 @@ msgstr "" msgid "Hmmmm, we couldn't load that moderation service." msgstr "" -#: src/view/com/composer/state/video.ts:446 +#: src/view/com/composer/state/video.ts:447 msgid "Hold up! We’re gradually giving access to video, and you’re still waiting in line. Check back soon!" msgstr "" @@ -6228,10 +6211,6 @@ msgstr "" msgid "If you believe your birthdate is incorrect, you can update it by <0>clicking here." msgstr "" -#: src/features/liveEvents/components/LiveEventFeedOptionsMenu.tsx:118 -msgid "If you choose to hide all events, you can always re-enable them from <0>Settings → Content & Media." -msgstr "" - #: src/screens/ProfileList/components/MoreOptionsMenu.tsx:272 msgid "If you delete this list, you won't be able to recover it." msgstr "" @@ -6411,7 +6390,7 @@ msgstr "" #: src/screens/Search/components/AdvancedSearchDialog/FilterBlock.tsx:58 #: src/screens/Search/components/AdvancedSearchDialog/FilterBlock.tsx:75 #: src/screens/Search/components/AdvancedSearchDialog/FilterBlock.tsx:81 -#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:406 +#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:416 msgid "Include" msgstr "Include" @@ -6425,12 +6404,12 @@ msgid "Include posts and/or replies (currently: {currentLabel})" msgstr "Include posts and/or replies (currently: {currentLabel})" #. Advanced search filter -#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:319 +#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:329 msgid "Include posts made since this date" msgstr "Include posts made since this date" #. Advanced search filter -#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:343 +#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:353 msgid "Include posts made until this date" msgstr "Include posts made until this date" @@ -6534,7 +6513,7 @@ msgstr "" msgid "Invite code not accepted. Check that you input it correctly and try again." msgstr "" -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:372 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:352 #: src/view/shell/Drawer.tsx:121 msgid "Invite friends" msgstr "Invite friends" @@ -6627,7 +6606,7 @@ msgid "It's just you right now! Add more people to your starter pack by searchin msgstr "" #. placeholder {0}: videoState.jobId -#: src/view/com/composer/Composer.tsx:2608 +#: src/view/com/composer/Composer.tsx:2605 msgid "Job ID: {0}" msgstr "" @@ -6667,8 +6646,8 @@ msgstr "" msgid "Journalism" msgstr "" +#: src/view/com/composer/Composer.tsx:1533 #: src/view/com/composer/Composer.tsx:1543 -#: src/view/com/composer/Composer.tsx:1553 #: src/view/com/composer/drafts/DraftsButton.tsx:135 msgid "Keep editing" msgstr "" @@ -6711,7 +6690,7 @@ msgstr "" msgid "Labels on your content" msgstr "" -#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:371 +#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:381 msgid "Language" msgstr "Language" @@ -6973,15 +6952,15 @@ msgid "Liked by {likeCount, plural, one {# user} other {# users}}" msgstr "" #: src/lib/hooks/useNotificationHandler.ts:158 -#: src/screens/Settings/NotificationSettings/index.tsx:148 -#: src/screens/Settings/NotificationSettings/index.tsx:303 +#: src/screens/Settings/NotificationSettings/index.tsx:160 +#: src/screens/Settings/NotificationSettings/index.tsx:315 #: src/view/screens/Profile.tsx:238 msgid "Likes" msgstr "" #: src/lib/hooks/useNotificationHandler.ts:200 -#: src/screens/Settings/NotificationSettings/index.tsx:227 -#: src/screens/Settings/NotificationSettings/index.tsx:366 +#: src/screens/Settings/NotificationSettings/index.tsx:239 +#: src/screens/Settings/NotificationSettings/index.tsx:378 msgid "Likes of your reposts" msgstr "" @@ -7117,27 +7096,19 @@ msgstr "" msgid "Live event hidden" msgstr "" -#: src/features/liveEvents/components/LiveEventFeedOptionsMenu.tsx:106 -msgid "Live event options" -msgstr "" - #: src/features/liveEvents/components/DiscoverFeedLiveEventFeedsAndTrendingBanner.tsx:53 #: src/features/liveEvents/components/SidebarLiveEventFeedsBanner.tsx:35 msgid "Live event unhidden" msgstr "" -#: src/features/liveEvents/components/LiveEventFeedOptionsMenu.tsx:110 -msgid "Live events appear occasionally when something exciting is happening. If you'd like, you can hide this particular event, or all events for this placement in your app interface." -msgstr "" - #: src/features/liveNow/components/LiveStatusDialog.tsx:245 msgid "Live feature is in beta" msgstr "" -#: src/features/liveNow/components/EditLiveDialog.tsx:149 -#: src/features/liveNow/components/EditLiveDialog.tsx:153 -#: src/features/liveNow/components/GoLiveDialog.tsx:131 -#: src/features/liveNow/components/GoLiveDialog.tsx:135 +#: src/features/liveNow/components/EditLiveDialog.tsx:142 +#: src/features/liveNow/components/EditLiveDialog.tsx:146 +#: src/features/liveNow/components/GoLiveDialog.tsx:137 +#: src/features/liveNow/components/GoLiveDialog.tsx:141 msgid "Live link" msgstr "" @@ -7310,7 +7281,7 @@ msgstr "Marked all requests as read" msgid "Maybe later" msgstr "" -#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:389 +#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:399 #: src/view/screens/Profile.tsx:236 msgid "Media" msgstr "" @@ -7347,8 +7318,8 @@ msgid "mentioned users" msgstr "" #: src/lib/hooks/useNotificationHandler.ts:179 -#: src/screens/Settings/NotificationSettings/index.tsx:181 -#: src/screens/Settings/NotificationSettings/index.tsx:328 +#: src/screens/Settings/NotificationSettings/index.tsx:193 +#: src/screens/Settings/NotificationSettings/index.tsx:340 #: src/view/screens/Notifications.tsx:99 msgid "Mentions" msgstr "" @@ -7785,8 +7756,8 @@ msgid "New Feature" msgstr "" #: src/lib/hooks/useNotificationHandler.ts:193 -#: src/screens/Settings/NotificationSettings/index.tsx:159 -#: src/screens/Settings/NotificationSettings/index.tsx:312 +#: src/screens/Settings/NotificationSettings/index.tsx:171 +#: src/screens/Settings/NotificationSettings/index.tsx:324 msgid "New followers" msgstr "" @@ -7820,13 +7791,13 @@ msgstr "" #: src/screens/Messages/Settings.tsx:289 #: src/screens/Settings/NotificationSettings/components/ChatNotificationDialogs.tsx:31 -#: src/screens/Settings/NotificationSettings/index.tsx:270 +#: src/screens/Settings/NotificationSettings/index.tsx:282 msgid "New message requests" msgstr "New message requests" #: src/screens/Messages/Settings.tsx:268 #: src/screens/Settings/NotificationSettings/components/ChatNotificationDialogs.tsx:21 -#: src/screens/Settings/NotificationSettings/index.tsx:253 +#: src/screens/Settings/NotificationSettings/index.tsx:265 msgid "New messages" msgstr "New messages" @@ -7936,7 +7907,7 @@ msgstr "" msgid "No drafts yet" msgstr "" -#: src/features/liveNow/components/EditLiveDialog.tsx:141 +#: src/features/liveNow/components/EditLiveDialog.tsx:134 msgid "No expiry set" msgstr "" @@ -7976,7 +7947,7 @@ msgstr "" #. placeholder {0}: sanitizeDisplayName( profile.displayName || profile.handle, ) #. placeholder {0}: sanitizeDisplayName( profile.displayName || profile.handle, moderation.ui('displayName'), ) #: src/components/ProfileCard.tsx:521 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:293 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:273 #: src/view/com/notifications/NotificationFeedItem.tsx:823 msgid "No longer following {0}" msgstr "" @@ -8144,8 +8115,8 @@ msgstr "" msgid "Non-sexual Nudity" msgstr "" -#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:293 -#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:296 +#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:307 +#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:310 msgid "None of these words" msgstr "None of these words" @@ -8183,8 +8154,7 @@ msgstr "" msgid "Note: This post is only visible to logged-in users." msgstr "" -#: src/screens/Bookmarks/components/EmptyState.tsx:36 -#: src/screens/Bookmarks/index.tsx:299 +#: src/screens/Bookmarks.tsx:292 msgid "Nothing saved yet" msgstr "" @@ -8204,7 +8174,7 @@ msgstr "" #: src/Navigation.tsx:756 #: src/screens/Messages/Settings.tsx:255 #: src/screens/Notifications/ActivityList.tsx:31 -#: src/screens/Settings/NotificationSettings/index.tsx:114 +#: src/screens/Settings/NotificationSettings/index.tsx:126 #: src/screens/Settings/Settings.tsx:197 #: src/screens/Settings/Settings.tsx:200 #: src/view/screens/Notifications.tsx:128 @@ -8285,11 +8255,11 @@ msgstr "One of the selected recipients does not allow group chats." msgid "One of the selected recipients has blocked you and cannot be messaged." msgstr "One of the selected recipients has blocked you and cannot be messaged." -#: src/view/com/composer/Composer.tsx:937 +#: src/view/com/composer/Composer.tsx:927 msgid "One or more GIFs is missing alt text." msgstr "" -#: src/view/com/composer/Composer.tsx:934 +#: src/view/com/composer/Composer.tsx:924 msgid "One or more images is missing alt text." msgstr "" @@ -8301,11 +8271,11 @@ msgstr "" msgid "One or more of your selected files are too large. Maximum size is {VIDEO_MAX_SIZE_MB} MB." msgstr "One or more of your selected files are too large. Maximum size is {VIDEO_MAX_SIZE_MB} MB." -#: src/view/com/composer/Composer.tsx:732 +#: src/view/com/composer/Composer.tsx:730 msgid "One or more posts are too long to save as a draft. {MAX_DRAFT_GRAPHEME_LENGTH, plural, one {The maximum number of characters is # character.} other {The maximum number of characters is # characters.}}" msgstr "" -#: src/view/com/composer/Composer.tsx:944 +#: src/view/com/composer/Composer.tsx:934 msgid "One or more videos is missing alt text." msgstr "" @@ -8318,7 +8288,7 @@ msgstr "" #. placeholder {0}: result.accepted.length #. placeholder {1}: next.length #. placeholder {2}: next.length -#: src/view/com/composer/Composer.tsx:235 +#: src/view/com/composer/Composer.tsx:234 msgid "Only {0} of {1} {2, plural, one {image} other {images}} added; limit is {MAX_GALLERY_IMAGES}" msgstr "Only {0} of {1} {2, plural, one {image} other {images}} added; limit is {MAX_GALLERY_IMAGES}" @@ -8395,7 +8365,7 @@ msgstr "Open advanced search options" msgid "Open avatar creator" msgstr "" -#: src/view/com/feeds/ComposerPrompt.tsx:202 +#: src/view/com/feeds/ComposerPrompt.tsx:201 msgid "Open camera" msgstr "" @@ -8422,7 +8392,7 @@ msgid "Open drawer menu" msgstr "" #: src/screens/Messages/components/MessageComposer.tsx:213 -#: src/view/com/composer/Composer.tsx:2248 +#: src/view/com/composer/Composer.tsx:2238 msgid "Open emoji picker" msgstr "" @@ -8558,7 +8528,7 @@ msgstr "" msgid "Opens composer" msgstr "" -#: src/view/com/feeds/ComposerPrompt.tsx:203 +#: src/view/com/feeds/ComposerPrompt.tsx:202 msgid "Opens device camera" msgstr "" @@ -8587,7 +8557,7 @@ msgstr "Opens full image" msgid "Opens helpdesk in browser" msgstr "" -#: src/view/com/feeds/ComposerPrompt.tsx:225 +#: src/view/com/feeds/ComposerPrompt.tsx:224 msgid "Opens image picker" msgstr "" @@ -8973,7 +8943,7 @@ msgstr "" msgid "Please complete the verification captcha." msgstr "" -#: src/view/com/composer/state/video.ts:470 +#: src/view/com/composer/state/video.ts:471 msgid "Please confirm your email address to upload videos." msgstr "" @@ -9116,7 +9086,7 @@ msgstr "" msgid "Porn" msgstr "" -#: src/view/com/composer/Composer.tsx:1893 +#: src/view/com/composer/Composer.tsx:1883 msgctxt "action" msgid "Post" msgstr "" @@ -9136,12 +9106,12 @@ msgstr "" msgid "Post a video" msgstr "" -#: src/view/com/composer/Composer.tsx:1891 +#: src/view/com/composer/Composer.tsx:1881 msgctxt "action" msgid "Post All" msgstr "" -#: src/view/com/composer/Composer.tsx:1552 +#: src/view/com/composer/Composer.tsx:1542 msgid "Post anyway" msgstr "Post anyway" @@ -9322,11 +9292,11 @@ msgstr "" msgid "Privacy violation of a minor" msgstr "" -#: src/view/com/composer/Composer.tsx:2682 +#: src/view/com/composer/Composer.tsx:2679 msgid "Processing GIF..." msgstr "" -#: src/view/com/composer/Composer.tsx:2684 +#: src/view/com/composer/Composer.tsx:2681 msgid "Processing video..." msgstr "" @@ -9372,22 +9342,22 @@ msgid "Public, sharable lists of users to mute or block in bulk." msgstr "" #. Accessibility label for button to publish a single post -#: src/view/com/composer/Composer.tsx:1877 +#: src/view/com/composer/Composer.tsx:1867 msgid "Publish post" msgstr "" #. Accessibility label for button to publish multiple posts in a thread -#: src/view/com/composer/Composer.tsx:1872 +#: src/view/com/composer/Composer.tsx:1862 msgid "Publish posts" msgstr "" #. Accessibility label for button to publish multiple replies in a thread -#: src/view/com/composer/Composer.tsx:1861 +#: src/view/com/composer/Composer.tsx:1851 msgid "Publish replies" msgstr "" #. Accessibility label for button to publish a single reply -#: src/view/com/composer/Composer.tsx:1866 +#: src/view/com/composer/Composer.tsx:1856 msgid "Publish reply" msgstr "" @@ -9445,8 +9415,8 @@ msgstr "" #: src/lib/hooks/useNotificationHandler.ts:186 #: src/screens/Post/PostQuotes.tsx:31 -#: src/screens/Settings/NotificationSettings/index.tsx:192 -#: src/screens/Settings/NotificationSettings/index.tsx:335 +#: src/screens/Settings/NotificationSettings/index.tsx:204 +#: src/screens/Settings/NotificationSettings/index.tsx:347 msgid "Quotes" msgstr "" @@ -9613,7 +9583,7 @@ msgstr "" #: src/components/FeedCard.tsx:376 #: src/components/StarterPack/Wizard/WizardListCard.tsx:106 #: src/components/StarterPack/Wizard/WizardListCard.tsx:113 -#: src/screens/Bookmarks/index.tsx:265 +#: src/screens/Bookmarks.tsx:258 #: src/screens/Messages/ConversationSettings/Member.tsx:162 #: src/screens/Messages/ConversationSettings/prompts.tsx:178 #: src/screens/Moderation/index.tsx:477 @@ -9714,7 +9684,7 @@ msgid "Remove from saved feeds" msgstr "" #: src/components/PostControls/BookmarkButton.tsx:143 -#: src/screens/Bookmarks/index.tsx:259 +#: src/screens/Bookmarks.tsx:252 msgid "Remove from saved posts" msgstr "" @@ -9726,8 +9696,8 @@ msgstr "" msgid "Remove image" msgstr "" +#: src/features/liveNow/components/EditLiveDialog.tsx:221 #: src/features/liveNow/components/EditLiveDialog.tsx:228 -#: src/features/liveNow/components/EditLiveDialog.tsx:235 msgid "Remove live status" msgstr "" @@ -9795,7 +9765,7 @@ msgid "Removed from saved feeds" msgstr "" #: src/components/PostControls/BookmarkButton.tsx:107 -#: src/screens/Bookmarks/index.tsx:217 +#: src/screens/Bookmarks.tsx:211 msgid "Removed from saved posts" msgstr "" @@ -9854,19 +9824,23 @@ msgctxt "description" msgid "Replied to you" msgstr "" -#: src/components/dms/MessageItem.tsx:878 +#: src/components/dms/MessageItem.tsx:906 msgid "Replied-to message from {senderName}, tap to scroll to it" msgstr "Replied-to message from {senderName}, tap to scroll to it" -#: src/components/dms/MessageItem.tsx:879 +#: src/components/dms/MessageItem.tsx:904 +msgid "Replied-to message was sent before you joined" +msgstr "Replied-to message was sent before you joined" + +#: src/components/dms/MessageItem.tsx:907 msgid "Replied-to message, tap to scroll to it" msgstr "Replied-to message, tap to scroll to it" #: src/components/activity-notifications/SubscribeProfileDialog.tsx:274 #: src/components/activity-notifications/SubscribeProfileDialog.tsx:286 #: src/lib/hooks/useNotificationHandler.ts:172 -#: src/screens/Settings/NotificationSettings/index.tsx:170 -#: src/screens/Settings/NotificationSettings/index.tsx:319 +#: src/screens/Settings/NotificationSettings/index.tsx:182 +#: src/screens/Settings/NotificationSettings/index.tsx:331 #: src/view/screens/Profile.tsx:235 msgid "Replies" msgstr "" @@ -9884,7 +9858,7 @@ msgstr "" msgid "Reply" msgstr "Reply" -#: src/view/com/composer/Composer.tsx:1889 +#: src/view/com/composer/Composer.tsx:1879 msgctxt "action" msgid "Reply" msgstr "" @@ -10054,8 +10028,8 @@ msgid "Reposted by you" msgstr "" #: src/lib/hooks/useNotificationHandler.ts:165 -#: src/screens/Settings/NotificationSettings/index.tsx:203 -#: src/screens/Settings/NotificationSettings/index.tsx:344 +#: src/screens/Settings/NotificationSettings/index.tsx:215 +#: src/screens/Settings/NotificationSettings/index.tsx:356 msgid "Reposts" msgstr "" @@ -10064,8 +10038,8 @@ msgid "Reposts of this post" msgstr "" #: src/lib/hooks/useNotificationHandler.ts:207 -#: src/screens/Settings/NotificationSettings/index.tsx:240 -#: src/screens/Settings/NotificationSettings/index.tsx:375 +#: src/screens/Settings/NotificationSettings/index.tsx:252 +#: src/screens/Settings/NotificationSettings/index.tsx:387 msgid "Reposts of your reposts" msgstr "" @@ -10258,8 +10232,8 @@ msgstr "Sad GIFs" #: src/components/dialogs/PostInteractionSettingsDialog.tsx:668 #: src/components/dialogs/PostInteractionSettingsDialog.tsx:673 #: src/components/StarterPack/QrCodeDialog.tsx:210 +#: src/features/liveNow/components/EditLiveDialog.tsx:197 #: src/features/liveNow/components/EditLiveDialog.tsx:204 -#: src/features/liveNow/components/EditLiveDialog.tsx:211 #: src/screens/Messages/ConversationSettings/prompts.tsx:82 #: src/screens/Profile/Header/EditProfileDialog.tsx:233 #: src/screens/Profile/Header/EditProfileDialog.tsx:247 @@ -10285,22 +10259,22 @@ msgstr "" #: src/screens/SavedFeeds.tsx:124 #: src/screens/SavedFeeds.tsx:311 #: src/screens/SavedFeeds.tsx:315 -#: src/view/com/composer/Composer.tsx:1533 +#: src/view/com/composer/Composer.tsx:1523 #: src/view/com/composer/drafts/DraftsButton.tsx:125 msgid "Save changes" msgstr "" -#: src/view/com/composer/Composer.tsx:1505 +#: src/view/com/composer/Composer.tsx:1495 #: src/view/com/composer/drafts/DraftsButton.tsx:93 msgid "Save changes?" msgstr "" -#: src/view/com/composer/Composer.tsx:1533 +#: src/view/com/composer/Composer.tsx:1523 #: src/view/com/composer/drafts/DraftsButton.tsx:125 msgid "Save draft" msgstr "" -#: src/view/com/composer/Composer.tsx:1507 +#: src/view/com/composer/Composer.tsx:1497 #: src/view/com/composer/drafts/DraftsButton.tsx:95 msgid "Save draft?" msgstr "" @@ -10344,7 +10318,7 @@ msgstr "" #: src/components/dialogs/nuxs/BookmarksAnnouncement.tsx:145 #: src/Navigation.tsx:561 -#: src/screens/Bookmarks/index.tsx:59 +#: src/screens/Bookmarks.tsx:59 msgid "Saved Posts" msgstr "" @@ -10390,7 +10364,7 @@ msgstr "" msgid "Scroll right" msgstr "" -#: src/components/dms/MessageItem.tsx:775 +#: src/components/dms/MessageItem.tsx:800 msgid "Scroll to the message this is replying to" msgstr "Scroll to the message this is replying to" @@ -10401,11 +10375,11 @@ msgstr "" #: src/components/dialogs/SearchablePeopleList.tsx:667 #: src/components/forms/SearchInput.tsx:51 #: src/components/forms/SearchInput.tsx:53 -#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:232 -#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:238 -#: src/screens/Search/Shell.tsx:495 -#: src/screens/Search/Shell.tsx:547 -#: src/screens/Search/Shell.tsx:689 +#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:250 +#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:256 +#: src/screens/Search/Shell.tsx:535 +#: src/screens/Search/Shell.tsx:585 +#: src/screens/Search/Shell.tsx:730 #: src/view/shell/bottom-bar/BottomBar.tsx:216 msgid "Search" msgstr "" @@ -10439,9 +10413,9 @@ msgstr "" msgid "Search for \"{interestsDisplayName}\" (active)" msgstr "" -#: src/screens/Search/components/AutocompleteResults.tsx:54 -msgid "Search for \"{searchText}\"" -msgstr "" +#: src/screens/Search/components/AutocompleteResults.tsx:49 +msgid "Search for “{searchText}”" +msgstr "Search for “{searchText}”" #: src/screens/StarterPack/Wizard/index.tsx:541 msgid "Search for feeds that you want to suggest to others." @@ -10494,7 +10468,7 @@ msgstr "" msgid "Search profiles" msgstr "" -#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:262 +#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:280 msgid "Search query" msgstr "Search query" @@ -10626,7 +10600,7 @@ msgstr "Select chat \"{name}\"" msgid "Select content languages" msgstr "" -#: src/features/liveNow/components/GoLiveDialog.tsx:180 +#: src/features/liveNow/components/GoLiveDialog.tsx:186 msgid "Select duration" msgstr "" @@ -10851,7 +10825,7 @@ msgstr "" msgid "Settings" msgstr "" -#: src/screens/Settings/NotificationSettings/index.tsx:209 +#: src/screens/Settings/NotificationSettings/index.tsx:221 msgid "Settings for activity from others" msgstr "" @@ -10859,49 +10833,49 @@ msgstr "" msgid "Settings for allowing others to be notified of your posts" msgstr "" -#: src/screens/Settings/NotificationSettings/index.tsx:143 +#: src/screens/Settings/NotificationSettings/index.tsx:155 msgid "Settings for like notifications" msgstr "" -#: src/screens/Settings/NotificationSettings/index.tsx:176 +#: src/screens/Settings/NotificationSettings/index.tsx:188 msgid "Settings for mention notifications" msgstr "" -#: src/screens/Settings/NotificationSettings/index.tsx:154 +#: src/screens/Settings/NotificationSettings/index.tsx:166 msgid "Settings for new follower notifications" msgstr "" -#: src/screens/Settings/NotificationSettings/index.tsx:282 +#: src/screens/Settings/NotificationSettings/index.tsx:294 msgid "Settings for notifications for everything else" msgstr "" -#: src/screens/Settings/NotificationSettings/index.tsx:222 +#: src/screens/Settings/NotificationSettings/index.tsx:234 msgid "Settings for notifications for likes of your reposts" msgstr "" #: src/screens/Messages/Settings.tsx:280 -#: src/screens/Settings/NotificationSettings/index.tsx:265 +#: src/screens/Settings/NotificationSettings/index.tsx:277 msgid "Settings for notifications for new message requests" msgstr "Settings for notifications for new message requests" #: src/screens/Messages/Settings.tsx:259 -#: src/screens/Settings/NotificationSettings/index.tsx:248 +#: src/screens/Settings/NotificationSettings/index.tsx:260 msgid "Settings for notifications for new messages" msgstr "Settings for notifications for new messages" -#: src/screens/Settings/NotificationSettings/index.tsx:235 +#: src/screens/Settings/NotificationSettings/index.tsx:247 msgid "Settings for notifications for reposts of your reposts" msgstr "" -#: src/screens/Settings/NotificationSettings/index.tsx:187 +#: src/screens/Settings/NotificationSettings/index.tsx:199 msgid "Settings for quote notifications" msgstr "" -#: src/screens/Settings/NotificationSettings/index.tsx:165 +#: src/screens/Settings/NotificationSettings/index.tsx:177 msgid "Settings for reply notifications" msgstr "" -#: src/screens/Settings/NotificationSettings/index.tsx:198 +#: src/screens/Settings/NotificationSettings/index.tsx:210 msgid "Settings for repost notifications" msgstr "" @@ -10922,7 +10896,7 @@ msgstr "" #: src/components/MediaPreview.tsx:237 #: src/components/Post/Embed/ImageContextMenu.tsx:74 #: src/components/StarterPack/QrCodeDialog.tsx:198 -#: src/screens/Hashtag.tsx:130 +#: src/screens/Hashtag.tsx:132 #: src/screens/Messages/components/InviteLinkDialog.tsx:415 #: src/screens/Messages/components/InviteLinkDialog.tsx:426 #: src/screens/StarterPack/StarterPackScreen.tsx:447 @@ -10985,7 +10959,7 @@ msgstr "" msgid "Share this feed" msgstr "" -#: src/screens/Search/Shell.tsx:576 +#: src/screens/Search/Shell.tsx:617 msgid "Share this search" msgstr "Share this search" @@ -11071,11 +11045,6 @@ msgstr "" msgid "Show lists of users to select from" msgstr "" -#: src/features/liveEvents/components/LiveEventFeedsSettingsToggle.tsx:28 -#: src/features/liveEvents/components/LiveEventFeedsSettingsToggle.tsx:38 -msgid "Show live events in your Discover Feed" -msgstr "" - #: src/components/Post/ShowMoreTextButton.tsx:52 msgid "Show More" msgstr "" @@ -11245,8 +11214,8 @@ msgstr "" msgid "Signed in as @{0}" msgstr "" -#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:313 -#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:316 +#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:323 +#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:326 msgid "Since" msgstr "Since" @@ -11267,7 +11236,7 @@ msgstr "" msgid "Skip contact sharing and continue to the app" msgstr "" -#: src/view/com/composer/Composer.tsx:1550 +#: src/view/com/composer/Composer.tsx:1540 msgid "Skip empty posts?" msgstr "Skip empty posts?" @@ -11347,6 +11316,10 @@ msgstr "" msgid "Someone reacted {0} to {target}" msgstr "Someone reacted {0} to {target}" +#: src/components/dms/MessageItem.tsx:793 +msgid "Someone replied" +msgstr "Someone replied" + #: src/components/dms/getSystemMessageInfo.ts:60 msgid "Someone was added" msgstr "Someone was added" @@ -11406,7 +11379,7 @@ msgstr "" msgid "Sorry, we're unable to load account suggestions at this time." msgstr "" -#: src/App.native.tsx:138 +#: src/App.tsx:138 #: src/App.web.tsx:117 msgid "Sorry! Your session expired. Please sign in again." msgstr "" @@ -11894,8 +11867,8 @@ msgid "That's everything!" msgstr "" #: src/components/moderation/BlockDialog.tsx:153 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:204 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:442 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:184 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:422 msgid "The account will be able to interact with you after unblocking." msgstr "" @@ -11949,7 +11922,7 @@ msgstr "" msgid "The following labels were applied to your content." msgstr "" -#: src/features/liveNow/components/GoLiveDialog.tsx:162 +#: src/features/liveNow/components/GoLiveDialog.tsx:168 msgid "The following services are enabled for your account: {allowedServices}" msgstr "" @@ -11974,8 +11947,8 @@ msgstr "The post you’re replying to was marked as being written in {suggestedL msgid "The Privacy Policy has been moved to <0/>" msgstr "" -#: src/view/com/composer/state/video.ts:428 -#: src/view/com/composer/state/video.ts:467 +#: src/view/com/composer/state/video.ts:429 +#: src/view/com/composer/state/video.ts:468 msgid "The selected video is larger than {VIDEO_MAX_SIZE_MB} MB. Please try again with a smaller file." msgstr "The selected video is larger than {VIDEO_MAX_SIZE_MB} MB. Please try again with a smaller file." @@ -12096,10 +12069,10 @@ msgstr "" #: src/screens/Messages/ConversationSettings/MemberMenu.tsx:127 #: src/screens/PostThread/components/ThreadItemAnchorFollowButton.tsx:117 #: src/screens/PostThread/components/ThreadItemAnchorFollowButton.tsx:130 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:96 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:277 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:304 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:320 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:92 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:257 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:284 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:300 #: src/view/com/profile/ProfileMenu.tsx:144 #: src/view/com/profile/ProfileMenu.tsx:157 #: src/view/com/profile/ProfileMenu.tsx:174 @@ -12279,8 +12252,8 @@ msgstr "" msgid "This email is already associated with your account." msgstr "" -#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:277 -#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:280 +#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:291 +#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:294 msgid "This exact phrase" msgstr "This exact phrase" @@ -12342,12 +12315,8 @@ msgstr "This invite link has been disabled." msgid "This invite link is invalid" msgstr "This invite link is invalid" -#: src/view/screens/Debug.tsx:327 -msgid "This is an empty state" -msgstr "" - -#: src/features/liveNow/components/EditLiveDialog.tsx:178 -#: src/features/liveNow/components/GoLiveDialog.tsx:155 +#: src/features/liveNow/components/EditLiveDialog.tsx:171 +#: src/features/liveNow/components/GoLiveDialog.tsx:161 msgid "This is not a valid link" msgstr "" @@ -12424,7 +12393,7 @@ msgstr "" msgid "This post is only visible to logged-in users." msgstr "" -#: src/screens/Bookmarks/index.tsx:255 +#: src/screens/Bookmarks.tsx:248 msgid "This post was deleted by its author" msgstr "" @@ -12432,7 +12401,7 @@ msgstr "" msgid "This post will be hidden from feeds and threads. This cannot be undone." msgstr "" -#: src/view/com/composer/Composer.tsx:1125 +#: src/view/com/composer/Composer.tsx:1115 msgid "This post's author has disabled quote posts." msgstr "" @@ -12798,15 +12767,15 @@ msgstr "" #: src/components/moderation/BlockDialog.tsx:190 #: src/components/moderation/BlockDialog.tsx:211 #: src/screens/Messages/ConversationSettings/MemberMenu.tsx:227 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:210 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:385 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:447 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:190 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:365 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:427 #: src/screens/ProfileList/components/Header.tsx:166 #: src/screens/ProfileList/components/Header.tsx:173 msgid "Unblock" msgstr "" -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:389 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:369 msgctxt "action" msgid "Unblock" msgstr "" @@ -12826,8 +12795,8 @@ msgstr "" msgid "Unblock account?" msgstr "Unblock account?" -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:202 -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:440 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:182 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:420 msgid "Unblock Account?" msgstr "" @@ -12838,8 +12807,6 @@ msgstr "" #: src/features/liveEvents/components/DiscoverFeedLiveEventFeedsAndTrendingBanner.tsx:58 #: src/features/liveEvents/components/DiscoverFeedLiveEventFeedsAndTrendingBanner.tsx:64 -#: src/features/liveEvents/components/LiveEventFeedOptionsMenu.tsx:73 -#: src/features/liveEvents/components/LiveEventFeedOptionsMenu.tsx:79 #: src/features/liveEvents/components/SidebarLiveEventFeedsBanner.tsx:40 #: src/features/liveEvents/components/SidebarLiveEventFeedsBanner.tsx:46 #: src/screens/Profile/components/GermButton.tsx:186 @@ -12864,7 +12831,7 @@ msgid "Undo repost ({0, plural, one {# repost} other {# reposts}})" msgstr "" #. placeholder {0}: profile.handle -#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:416 +#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:396 msgid "Unfollow {0}" msgstr "" @@ -13031,12 +12998,12 @@ msgstr "" msgid "Unsupported clipboard content" msgstr "Unsupported clipboard content" -#: src/view/com/composer/Composer.tsx:1642 +#: src/view/com/composer/Composer.tsx:1632 msgid "Unsupported video type: {mimeType}" msgstr "" -#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:337 -#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:340 +#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:347 +#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:350 msgid "Until" msgstr "Until" @@ -13124,7 +13091,7 @@ msgstr "" msgid "Upload from Library" msgstr "" -#: src/view/com/composer/Composer.tsx:2675 +#: src/view/com/composer/Composer.tsx:2672 msgid "Uploading GIF..." msgstr "" @@ -13138,7 +13105,7 @@ msgstr "" msgid "Uploading link thumbnail..." msgstr "" -#: src/view/com/composer/Composer.tsx:2677 +#: src/view/com/composer/Composer.tsx:2674 msgid "Uploading video..." msgstr "" @@ -13378,7 +13345,7 @@ msgstr "" msgid "Video" msgstr "" -#: src/view/com/composer/state/video.ts:389 +#: src/view/com/composer/state/video.ts:390 msgid "Video failed to process" msgstr "" @@ -13417,7 +13384,7 @@ msgstr "" msgid "Video settings" msgstr "" -#: src/view/com/composer/Composer.tsx:2695 +#: src/view/com/composer/Composer.tsx:2692 msgid "Video uploaded" msgstr "" @@ -13430,13 +13397,13 @@ msgstr "" msgid "Videos" msgstr "" -#: src/view/com/composer/Composer.tsx:441 -#: src/view/com/composer/Composer.tsx:573 +#: src/view/com/composer/Composer.tsx:439 +#: src/view/com/composer/Composer.tsx:571 #: src/view/com/composer/SelectMediaButton.tsx:440 msgid "Videos must be less than 3 minutes long." msgstr "" -#: src/view/com/composer/Composer.tsx:1232 +#: src/view/com/composer/Composer.tsx:1222 msgctxt "Action to view the post the user just created" msgid "View" msgstr "" @@ -13456,7 +13423,7 @@ msgstr "" #. placeholder {0}: info.creatorHandle #. placeholder {0}: profile.handle #: src/screens/Profile/components/ProfileFeedHeader.tsx:454 -#: src/screens/Search/components/SearchProfileCard.tsx:36 +#: src/screens/Search/components/SearchProfileCard.tsx:37 #: src/screens/VideoFeed/index.tsx:809 #: src/view/com/notifications/NotificationFeedItem.tsx:619 msgid "View {0}'s profile" @@ -13525,7 +13492,7 @@ msgstr "" msgid "View more trending videos" msgstr "" -#: src/view/com/composer/Composer.tsx:1227 +#: src/view/com/composer/Composer.tsx:1217 msgid "View post" msgstr "" @@ -13726,7 +13693,7 @@ msgstr "" msgid "We sent an email to <0>{0} containing a link. Please click on it to complete the email verification process." msgstr "" -#: src/view/com/composer/state/video.ts:450 +#: src/view/com/composer/state/video.ts:451 msgid "We were unable to determine if you are allowed to upload videos. Please try again." msgstr "" @@ -13821,7 +13788,7 @@ msgstr "We’re sorry, but your search could not be completed. Please try again msgid "We're sorry, you cannot access this screen at this time." msgstr "" -#: src/view/com/composer/Composer.tsx:1123 +#: src/view/com/composer/Composer.tsx:1113 msgid "We're sorry! The post you are replying to has been deleted." msgstr "" @@ -13872,13 +13839,13 @@ msgid "What do you want to call your starter pack?" msgstr "" #. Advanced search: Example of an “exact phrase” search -#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:282 +#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:296 msgid "what’s up" msgstr "what’s up" #: src/view/com/auth/SplashScreen.web.tsx:98 -#: src/view/com/composer/Composer.tsx:1606 -#: src/view/com/feeds/ComposerPrompt.tsx:193 +#: src/view/com/composer/Composer.tsx:1596 +#: src/view/com/feeds/ComposerPrompt.tsx:192 msgid "What's up?" msgstr "" @@ -13963,7 +13930,7 @@ msgstr "Would you like to block this user and/or leave this conversation?" msgid "Would you like to save this as a draft before viewing your drafts?" msgstr "" -#: src/view/com/composer/Composer.tsx:1521 +#: src/view/com/composer/Composer.tsx:1511 msgid "Would you like to save this as a draft to edit later?" msgstr "" @@ -13972,12 +13939,12 @@ msgstr "" msgid "Write a post" msgstr "" -#: src/view/com/composer/Composer.tsx:1702 +#: src/view/com/composer/Composer.tsx:1692 msgid "Write post" msgstr "" #: src/screens/PostThread/components/ThreadComposePrompt.tsx:91 -#: src/view/com/composer/Composer.tsx:1604 +#: src/view/com/composer/Composer.tsx:1594 msgid "Write your reply" msgstr "" @@ -13995,8 +13962,8 @@ msgstr "" msgid "Wrong kind of conversation" msgstr "Wrong kind of conversation" -#: src/features/liveNow/components/EditLiveDialog.tsx:154 -#: src/features/liveNow/components/GoLiveDialog.tsx:136 +#: src/features/liveNow/components/EditLiveDialog.tsx:147 +#: src/features/liveNow/components/GoLiveDialog.tsx:142 msgid "www.mylivestream.tv" msgstr "" @@ -14072,8 +14039,8 @@ msgstr "" msgid "You are in line." msgstr "" -#: src/features/liveNow/components/EditLiveDialog.tsx:120 -#: src/features/liveNow/components/EditLiveDialog.tsx:125 +#: src/features/liveNow/components/EditLiveDialog.tsx:113 +#: src/features/liveNow/components/EditLiveDialog.tsx:118 msgid "You are Live" msgstr "" @@ -14081,7 +14048,7 @@ msgstr "" msgid "You are no longer live" msgstr "" -#: src/view/com/composer/state/video.ts:443 +#: src/view/com/composer/state/video.ts:444 msgid "You are not allowed to upload videos." msgstr "" @@ -14149,11 +14116,11 @@ msgid "You can now sign in with your new password." msgstr "" #. Toast shown when the user tries to add more images but the post gallery is already at the cap -#: src/view/com/composer/Composer.tsx:222 +#: src/view/com/composer/Composer.tsx:221 msgid "You can only add up to {MAX_GALLERY_IMAGES, plural, other {# images}} per post" msgstr "You can only add up to {MAX_GALLERY_IMAGES, plural, other {# images}} per post" -#: src/view/com/composer/Composer.tsx:1526 +#: src/view/com/composer/Composer.tsx:1516 msgid "You can only save drafts up to 1000 characters." msgstr "" @@ -14298,7 +14265,7 @@ msgstr "" msgid "You have temporarily reached the limit for video uploads. Please try again later." msgstr "" -#: src/view/com/composer/Composer.tsx:1516 +#: src/view/com/composer/Composer.tsx:1506 msgid "You have unsaved changes to this draft, would you like to save them?" msgstr "" @@ -14409,15 +14376,15 @@ msgstr "You reacted {0} to {target}" msgid "You recently changed your birthdate" msgstr "" -#: src/components/dms/MessageItem.tsx:805 +#: src/components/dms/MessageItem.tsx:786 msgid "You replied" msgstr "You replied" -#: src/components/dms/MessageItem.tsx:803 +#: src/components/dms/MessageItem.tsx:785 msgid "You replied to {originalName}" msgstr "You replied to {originalName}" -#: src/components/dms/MessageItem.tsx:801 +#: src/components/dms/MessageItem.tsx:783 msgid "You replied to yourself" msgstr "You replied to yourself" @@ -14525,7 +14492,7 @@ msgstr "" msgid "You've reached the end of your feed! Find some more accounts to follow." msgstr "" -#: src/view/com/composer/Composer.tsx:719 +#: src/view/com/composer/Composer.tsx:717 msgid "You've reached the maximum number of drafts" msgstr "" @@ -14533,7 +14500,7 @@ msgstr "" msgid "You've reached the maximum number of requests allowed. Please try again later." msgstr "" -#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:440 +#: src/screens/Search/components/AdvancedSearchDialog/index.tsx:450 msgid "You’ve reached the maximum of {MAX_FILTERS, plural, one {# filter} other {# filters}}. Add more values to an existing filter instead of creating new ones." msgstr "You’ve reached the maximum of {MAX_FILTERS, plural, one {# filter} other {# filters}}. Add more values to an existing filter instead of creating new ones." @@ -14541,11 +14508,11 @@ msgstr "You’ve reached the maximum of {MAX_FILTERS, plural, one {# filter} oth msgid "You've reached the start of the active content." msgstr "" -#: src/view/com/composer/state/video.ts:454 +#: src/view/com/composer/state/video.ts:455 msgid "You've reached your daily limit for video uploads (too many bytes)" msgstr "" -#: src/view/com/composer/state/video.ts:458 +#: src/view/com/composer/state/video.ts:459 msgid "You've reached your daily limit for video uploads (too many videos)" msgstr "" @@ -14565,7 +14532,7 @@ msgstr "" msgid "Your account has been suspended" msgstr "" -#: src/view/com/composer/state/video.ts:462 +#: src/view/com/composer/state/video.ts:463 msgid "Your account is not yet old enough to upload videos. Please try again later." msgstr "" @@ -14673,10 +14640,6 @@ msgstr "" msgid "Your interests help us find what you like!" msgstr "" -#: src/features/liveEvents/components/LiveEventFeedOptionsMenu.tsx:69 -msgid "Your live event preferences have been updated." -msgstr "" - #: src/screens/Signup/StepInfo/index.tsx:353 msgid "Your location has been updated." msgstr "" @@ -14697,11 +14660,11 @@ msgstr "" msgid "Your password must be at least 8 characters long." msgstr "" -#: src/view/com/composer/Composer.tsx:1223 +#: src/view/com/composer/Composer.tsx:1213 msgid "Your post was sent" msgstr "" -#: src/view/com/composer/Composer.tsx:1220 +#: src/view/com/composer/Composer.tsx:1210 msgid "Your posts were sent" msgstr "" @@ -14722,7 +14685,7 @@ msgstr "" msgid "Your profile, posts, feeds, and lists will no longer be visible to other Bluesky users. You can reactivate your account at any time by logging in." msgstr "" -#: src/view/com/composer/Composer.tsx:1222 +#: src/view/com/composer/Composer.tsx:1212 msgid "Your reply was sent" msgstr "" @@ -14735,7 +14698,7 @@ msgstr "" msgid "Your selected interests help us serve you content you care about." msgstr "" -#: src/view/com/composer/Composer.tsx:1551 +#: src/view/com/composer/Composer.tsx:1541 msgid "Your thread has empty posts that will be skipped. The remaining posts will be published as a thread." msgstr "Your thread has empty posts that will be skipped. The remaining posts will be published as a thread." diff --git a/src/screens/Hashtag.tsx b/src/screens/Hashtag.tsx index 5057f4a68d..e4f08291c9 100644 --- a/src/screens/Hashtag.tsx +++ b/src/screens/Hashtag.tsx @@ -121,7 +121,9 @@ export default function HashtagScreen({ {headerTitle} {author && ( - {_(msg`From @${sanitizedAuthor}`)} + {author.startsWith('did:') + ? _(msg`From ${sanitizedAuthor}`) + : _(msg`From @${sanitizedAuthor}`)} )} @@ -172,11 +174,9 @@ function HashtagScreenTab({ const isCashtag = fullTag.startsWith('$') const queryParam = useMemo(() => { - // Cashtags need # prefix for search: "#$BTC" or "#$BTC from:author" - const searchTag = isCashtag ? `#${fullTag}` : fullTag - if (!author) return searchTag - return `${searchTag} from:${author}` - }, [fullTag, author, isCashtag]) + // Cashtags need # prefix for search: "#$BTC" + return isCashtag ? `#${fullTag}` : fullTag + }, [fullTag, isCashtag]) const { data, @@ -188,7 +188,7 @@ function HashtagScreenTab({ refetch, fetchNextPage, hasNextPage, - } = useSearchPostsQuery({query: queryParam, sort, enabled: active}) + } = useSearchPostsQuery({query: queryParam, sort, enabled: active, author}) const posts = useMemo(() => { return data?.pages.flatMap(page => page.posts) || [] diff --git a/src/screens/Log.tsx b/src/screens/Log.tsx index c96b507a05..b7e5c1cf54 100644 --- a/src/screens/Log.tsx +++ b/src/screens/Log.tsx @@ -78,11 +78,7 @@ export function LogScreen({}: NativeStackScreenProps< ) : ( )} - + {entry.context && ( ({String(entry.context)}) diff --git a/src/screens/Profile/Header/DisplayName.tsx b/src/screens/Profile/Header/DisplayName.tsx index 88bc2f181e..684a9fe53b 100644 --- a/src/screens/Profile/Header/DisplayName.tsx +++ b/src/screens/Profile/Header/DisplayName.tsx @@ -4,7 +4,8 @@ import {type AppBskyActorDefs, type ModerationDecision} from '@atproto/api' import {sanitizeDisplayName} from '#/lib/strings/display-names' import {sanitizeHandle} from '#/lib/strings/handles' import {type Shadow} from '#/state/cache/types' -import {atoms as a, useBreakpoints, useTheme} from '#/alf' +import {atoms as a, platform, useBreakpoints, useTheme} from '#/alf' +import {ProfileBadges} from '#/components/ProfileBadges' import {Text} from '#/components/Typography' export function ProfileHeaderDisplayName({ @@ -18,7 +19,7 @@ export function ProfileHeaderDisplayName({ const {gtMobile} = useBreakpoints() return ( - + {sanitizeDisplayName( profile.displayName || sanitizeHandle(profile.handle), moderation.ui('displayName'), )} + + + ) diff --git a/src/screens/Profile/Header/ProfileHeaderStandard.tsx b/src/screens/Profile/Header/ProfileHeaderStandard.tsx index 051e8497cd..da01ded772 100644 --- a/src/screens/Profile/Header/ProfileHeaderStandard.tsx +++ b/src/screens/Profile/Header/ProfileHeaderStandard.tsx @@ -13,7 +13,6 @@ import {Trans} from '@lingui/react/macro' import {useHaptics} from '#/lib/haptics' import {sanitizeDisplayName} from '#/lib/strings/display-names' -import {sanitizeHandle} from '#/lib/strings/handles' import {logger} from '#/logger' import {type Shadow, useProfileShadow} from '#/state/cache/profile-shadow' import { @@ -22,7 +21,7 @@ import { } from '#/state/queries/profile' import {useRequireAuth, useSession} from '#/state/session' import {ProfileMenu} from '#/view/com/profile/ProfileMenu' -import {atoms as a, platform, useBreakpoints, useTheme} from '#/alf' +import {atoms as a, platform} from '#/alf' import {SubscribeProfileButton} from '#/components/activity-notifications/SubscribeProfileButton' import {Button, ButtonIcon, ButtonText} from '#/components/Button' import {DebugFieldDisplay} from '#/components/DebugFieldDisplay' @@ -34,16 +33,15 @@ import { KnownFollowers, shouldShowKnownFollowers, } from '#/components/KnownFollowers' -import {ProfileBadges} from '#/components/ProfileBadges' import * as Prompt from '#/components/Prompt' import {RichText} from '#/components/RichText' import * as Toast from '#/components/Toast' -import {Text} from '#/components/Typography' import {useAnalytics} from '#/analytics' import {IS_IOS, IS_NATIVE} from '#/env' import {InviteFriendsDialog} from '#/features/inviteFriends' import {useActorStatus} from '#/features/liveNow' import {GermButton} from '../components/GermButton' +import {ProfileHeaderDisplayName} from './DisplayName' import {EditProfileDialog} from './EditProfileDialog' import {ProfileHeaderHandle} from './Handle' import {ProfileHeaderMetrics} from './Metrics' @@ -65,8 +63,6 @@ let ProfileHeaderStandard = ({ hideBackButton = false, isPlaceholderProfile, }: Props): React.ReactNode => { - const t = useTheme() - const {gtMobile} = useBreakpoints() const profile = useProfileShadow(profileUnshadowed) const {currentAccount} = useSession() @@ -138,26 +134,10 @@ let ProfileHeaderStandard = ({ - - - {sanitizeDisplayName( - profile.displayName || sanitizeHandle(profile.handle), - moderation.ui('displayName'), - )} - - - - - + {!isPlaceholderProfile && !isBlockedUser && ( diff --git a/src/screens/Search/components/AdvancedSearchDialog/index.tsx b/src/screens/Search/components/AdvancedSearchDialog/index.tsx index bb458ad2bb..95fce6a56c 100644 --- a/src/screens/Search/components/AdvancedSearchDialog/index.tsx +++ b/src/screens/Search/components/AdvancedSearchDialog/index.tsx @@ -154,6 +154,24 @@ function DialogInner({ const scrollRef = useRef(null) const filtersSectionRef = useRef(null) + const suggestions = [ + { + all: l({ + message: 'cats dogs', + comment: 'Advanced search: Example of an “all of these words” search', + }), + none: l({ + message: 'cows pigs', + comment: 'Advanced search: Example of a “none of these words” search', + }), + }, + ] + + // eslint-disable-next-line react/hook-use-state + const [suggestion] = useState(() => + Math.floor(Math.random() * suggestions.length), + ) + function addFilter() { if (filters.length >= MAX_FILTERS) return /* @@ -261,11 +279,7 @@ function DialogInner({ @@ -295,11 +309,7 @@ function DialogInner({ diff --git a/src/state/queries/feed.ts b/src/state/queries/feed.ts index b8a2a9f39f..c0eb25f54a 100644 --- a/src/state/queries/feed.ts +++ b/src/state/queries/feed.ts @@ -454,7 +454,7 @@ export function usePinnedFeedsInfos() { pinnedItems.map(f => f.value), ), gcTime: GCTIME.INFINITY, - staleTime: STALE.INFINITY, + staleTime: STALE.MINUTES.FIFTEEN, enabled: !isLoadingPrefs, queryFn: async () => { if (!hasSession) { diff --git a/src/state/queries/index.ts b/src/state/queries/index.ts index 183d8c883a..9a5ceff577 100644 --- a/src/state/queries/index.ts +++ b/src/state/queries/index.ts @@ -11,6 +11,7 @@ export const STALE = { ONE: MINUTE, THREE: 3 * MINUTE, FIVE: 5 * MINUTE, + FIFTEEN: 15 * MINUTE, THIRTY: 30 * MINUTE, }, HOURS: { diff --git a/src/state/queries/search-posts.ts b/src/state/queries/search-posts.ts index 1fc8963caa..d951f67064 100644 --- a/src/state/queries/search-posts.ts +++ b/src/state/queries/search-posts.ts @@ -22,29 +22,35 @@ import { } from './util' const searchPostsQueryKeyRoot = 'search-posts' -const searchPostsQueryKey = ({query, sort}: {query: string; sort?: string}) => [ - searchPostsQueryKeyRoot, +const searchPostsQueryKey = ({ query, sort, -] + author, +}: { + query: string + sort?: string + author?: string +}) => [searchPostsQueryKeyRoot, query, sort, author] export function useSearchPostsQuery({ query, sort, enabled, + author, }: { query: string sort?: 'top' | 'latest' enabled?: boolean + author?: string }) { const agent = useAgent() const moderationOpts = useModerationOpts() const selectArgs = useMemo( () => ({ - isSearchingSpecificUser: /from:(\w+)/.test(query), + isSearchingSpecificUser: !!author || /from:(\w+)/.test(query), moderationOpts, }), - [query, moderationOpts], + [query, author, moderationOpts], ) const lastRun = useRef<{ data: InfiniteData @@ -59,13 +65,14 @@ export function useSearchPostsQuery({ QueryKey, string | undefined >({ - queryKey: searchPostsQueryKey({query, sort}), + queryKey: searchPostsQueryKey({query, sort, author}), queryFn: async ({pageParam}) => { const res = await agent.app.bsky.feed.searchPosts({ q: query, limit: 25, cursor: pageParam, sort, + author, }) return res.data }, diff --git a/src/view/com/composer/Composer.tsx b/src/view/com/composer/Composer.tsx index 3567f20b5d..a2cf83c75e 100644 --- a/src/view/com/composer/Composer.tsx +++ b/src/view/com/composer/Composer.tsx @@ -13,7 +13,6 @@ import { ActivityIndicator, BackHandler, Keyboard, - KeyboardAvoidingView, type LayoutChangeEvent, ScrollView, type StyleProp, @@ -21,6 +20,7 @@ import { View, type ViewStyle, } from 'react-native' +import {KeyboardAvoidingView} from 'react-native-keyboard-controller' // @ts-expect-error no type definition import ProgressCircle from 'react-native-progress/Circle' import Animated, { @@ -72,7 +72,6 @@ import { type SupportedMimeTypes, VIDEO_MAX_DURATION_MS, } from '#/lib/constants' -import {useIsKeyboardVisible} from '#/lib/hooks/useIsKeyboardVisible' import {useNonReactiveCallback} from '#/lib/hooks/useNonReactiveCallback' import {createVideoTelemetry} from '#/lib/media/video/telemetry' import {mimeToExt} from '#/lib/media/video/util' @@ -287,7 +286,6 @@ export const ComposePost = ({ const {data: preferences} = usePreferencesQuery() const navigation = useNavigation() - const [isKeyboardVisible] = useIsKeyboardVisible({iosUseWillEvents: true}) const [isPublishing, setIsPublishing] = useState(false) const [publishingStage, setPublishingStage] = useState('') const [error, setError] = useState('') @@ -856,17 +854,9 @@ export const ComposePost = ({ const viewStyles = useMemo( () => ({ paddingTop: IS_ANDROID ? insets.top : 0, - paddingBottom: - // iOS - when keyboard is closed, keep the bottom bar in the safe area - (IS_IOS && !isKeyboardVisible) || - // Android - Android >=35 KeyboardAvoidingView adds double padding when - // keyboard is closed, so we subtract that in the offset and add it back - // here when the keyboard is open - (IS_ANDROID && isKeyboardVisible) - ? insets.bottom - : 0, + paddingBottom: insets.bottom, }), - [insets, isKeyboardVisible], + [insets.top, insets.bottom], ) const onPressCancel = useCallback(() => { @@ -1100,13 +1090,13 @@ export const ComposePost = ({ posts, } } - } catch (waitErr: any) { + } catch (waitErr) { logger.info(`composer: waiting for app view failed`, { safeMessage: waitErr, }) } - } catch (e: any) { - logger.error(e, { + } catch (e) { + logger.error(e instanceof Error ? e : String(e), { message: `Composer: create post failed`, hasImages: filteredThread.posts.some( p => @@ -1115,7 +1105,7 @@ export const ComposePost = ({ ), }) - let err = cleanError(e.message) + let err = e instanceof Error ? cleanError(e.message) : String(e) if ( e instanceof apilib.ReplyDeletedError || err.includes('not locate record') @@ -1417,8 +1407,8 @@ export const ComposePost = ({ publishingStage={publishingStage} topBarAnimatedStyle={topBarAnimatedStyle} onCancel={onPressCancel} - onPublish={onPressPublish} - onSelectDraft={handleSelectDraft} + onPublish={() => void onPressPublish()} + onSelectDraft={draft => void handleSelectDraft(draft)} onSaveDraft={saveCurrentDraft} onDiscard={handleClearComposer} isEmpty={isComposerEmpty} @@ -1531,7 +1521,7 @@ export const ComposePost = ({ {allPostsWithinLimit && ( void handleSaveDraft()} color="primary" /> )} @@ -1694,7 +1684,7 @@ let ComposerPost = memo(function ComposerPost({ postId: post.id, }) }} - onPhotoPasted={onPhotoPasted} + onPhotoPasted={uri => void onPhotoPasted(uri)} onNewLink={onNewLink} onError={onError} onPressPublish={onPublish} @@ -2188,7 +2178,7 @@ function ComposerFooter({ }), ).catch(e => { logger.error(`createComposerImage failed`, { - safeMessage: e.message, + safeMessage: e instanceof Error ? e.message : String(e), }) }) @@ -2425,24 +2415,31 @@ function useScrollTracker({ } function useKeyboardVerticalOffset() { - const {top, bottom} = useSafeAreaInsets() + const insets = useSafeAreaInsets() - // Android etc - if (!IS_IOS) { - // need to account for the edge-to-edge nav bar - return bottom * -1 + // the keyboardavoidingview has bottom padding to avoid being obscured by the safe area when keyboard is closed. + // however, this leads to a gap when the keyboard is open. we account for that by subtracting the bottom inset when open. + let keyboardVerticalOffset = insets.bottom * -1 + + // iOS requires a bit of extra offset to account for the native sheet not being at the top of the screen + if (IS_IOS) { + // they ditched the gap behaviour on 26 + if (IS_LIQUID_GLASS) { + keyboardVerticalOffset += insets.top + } + + // iPhone SE + else if (insets.top === 20) { + keyboardVerticalOffset += 40 + } + + // all other iPhones on <26 + else { + keyboardVerticalOffset += insets.top + 10 + } } - // they ditched the gap behaviour on 26 - if (IS_LIQUID_GLASS) { - return top - } - - // iPhone SE - if (top === 20) return 40 - - // all other iPhones on <26 - return top + 10 + return keyboardVerticalOffset } async function whenAppViewReady(