diff --git a/package.json b/package.json
index bed17e9dc2..b80456b792 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
"private": true,
"scripts": {
"prepare": "is-ci || husky install",
- "postinstall": "patch-package",
+ "postinstall": "patch-package && yarn intl:compile",
"prebuild": "expo prebuild --clean",
"android": "expo run:android",
"ios": "expo run:ios",
diff --git a/src/state/queries/actor-autocomplete.ts b/src/state/queries/actor-autocomplete.ts
index fe207371d0..709a15b407 100644
--- a/src/state/queries/actor-autocomplete.ts
+++ b/src/state/queries/actor-autocomplete.ts
@@ -11,6 +11,7 @@ import {
getModerationOpts,
useModerationOpts,
} from './preferences'
+import {isInvalidHandle} from '#/lib/strings/handles'
const DEFAULT_MOD_OPTS = getModerationOpts({
userDid: '',
@@ -119,7 +120,7 @@ function prefixMatch(
prefix: string,
info: AppBskyActorDefs.ProfileViewBasic,
): boolean {
- if (info.handle.includes(prefix)) {
+ if (!isInvalidHandle(info.handle) && info.handle.includes(prefix)) {
return true
}
if (info.displayName?.toLocaleLowerCase().includes(prefix)) {
diff --git a/src/view/com/auth/create/state.ts b/src/view/com/auth/create/state.ts
index 4df82f8fcb..a77d2a44fe 100644
--- a/src/view/com/auth/create/state.ts
+++ b/src/view/com/auth/create/state.ts
@@ -144,7 +144,7 @@ export async function submit({
}
export function is13(state: CreateAccountState) {
- return getAge(state.birthDate) >= 18
+ return getAge(state.birthDate) >= 13
}
export function is18(state: CreateAccountState) {
diff --git a/src/view/com/composer/Composer.tsx b/src/view/com/composer/Composer.tsx
index c4453e0c3e..64427b837e 100644
--- a/src/view/com/composer/Composer.tsx
+++ b/src/view/com/composer/Composer.tsx
@@ -452,7 +452,7 @@ export const ComposePost = observer(function ComposePost({
>
) : null}
- {isDesktop ? : null}
+ {!isMobile ? : null}
diff --git a/src/view/com/composer/text-input/web/Autocomplete.tsx b/src/view/com/composer/text-input/web/Autocomplete.tsx
index 1f74125617..51197b8e4d 100644
--- a/src/view/com/composer/text-input/web/Autocomplete.tsx
+++ b/src/view/com/composer/text-input/web/Autocomplete.tsx
@@ -134,7 +134,7 @@ const MentionList = forwardRef(
return true
}
- if (event.key === 'Enter') {
+ if (event.key === 'Enter' || event.key === 'Tab') {
enterHandler()
return true
}
diff --git a/src/view/com/composer/text-input/web/EmojiPicker.web.tsx b/src/view/com/composer/text-input/web/EmojiPicker.web.tsx
index 59a3a13928..575b5dd22d 100644
--- a/src/view/com/composer/text-input/web/EmojiPicker.web.tsx
+++ b/src/view/com/composer/text-input/web/EmojiPicker.web.tsx
@@ -76,7 +76,7 @@ export function EmojiPicker({close}: {close: () => void}) {
return (await import('./EmojiPickerData.json')).default
}}
onEmojiSelect={onInsert}
- autoFocus={false}
+ autoFocus={true}
/>
diff --git a/src/view/com/modals/AltImage.tsx b/src/view/com/modals/AltImage.tsx
index 80130f43ad..a2e9183179 100644
--- a/src/view/com/modals/AltImage.tsx
+++ b/src/view/com/modals/AltImage.tsx
@@ -80,6 +80,7 @@ export function Component({image}: Props) {
source={{
uri: image.cropped?.path ?? image.path,
}}
+ contentFit="contain"
accessible={true}
accessibilityIgnoresInvertColors
/>
diff --git a/src/view/com/util/List.tsx b/src/view/com/util/List.tsx
index 3929537096..1d16df3945 100644
--- a/src/view/com/util/List.tsx
+++ b/src/view/com/util/List.tsx
@@ -88,6 +88,7 @@ function ListImpl(
{...props}
contentOffset={contentOffset}
refreshControl={refreshControl}
+ scrollIndicatorInsets={{right: 1}}
onScroll={scrollHandler}
scrollEventThrottle={1}
style={style}
diff --git a/src/view/screens/Feeds.tsx b/src/view/screens/Feeds.tsx
index 9ce745c126..20cdf815ae 100644
--- a/src/view/screens/Feeds.tsx
+++ b/src/view/screens/Feeds.tsx
@@ -493,6 +493,7 @@ export function FeedsScreen(_props: Props) {
onEndReached={onEndReached}
// @ts-ignore our .web version only -prf
desktopFixedHeight
+ scrollIndicatorInsets={{right: 1}}
/>
{hasSession && (
diff --git a/src/view/screens/Profile.tsx b/src/view/screens/Profile.tsx
index 12c3a098b2..ee83744dd2 100644
--- a/src/view/screens/Profile.tsx
+++ b/src/view/screens/Profile.tsx
@@ -39,6 +39,7 @@ import {truncateAndInvalidate} from '#/state/queries/util'
import {Text} from '#/view/com/util/text/Text'
import {usePalette} from 'lib/hooks/usePalette'
import {isNative} from '#/platform/detection'
+import {isInvalidHandle} from '#/lib/strings/handles'
interface SectionRef {
scrollToTop: () => void
@@ -231,7 +232,7 @@ function ProfileScreenLoaded({
track('ProfileScreen:PressCompose')
const mention =
profile.handle === currentAccount?.handle ||
- profile.handle === 'handle.invalid'
+ isInvalidHandle(profile.handle)
? undefined
: profile.handle
openComposer({mention})
diff --git a/src/view/shell/desktop/LeftNav.tsx b/src/view/shell/desktop/LeftNav.tsx
index 9c89eac6ff..f4ee178e7d 100644
--- a/src/view/shell/desktop/LeftNav.tsx
+++ b/src/view/shell/desktop/LeftNav.tsx
@@ -46,6 +46,7 @@ import {useComposerControls} from '#/state/shell/composer'
import {useFetchHandle} from '#/state/queries/handle'
import {emitSoftReset} from '#/state/events'
import {NavSignupCard} from '#/view/shell/NavSignupCard'
+import {isInvalidHandle} from '#/lib/strings/handles'
function ProfileCard() {
const {currentAccount} = useSession()
@@ -221,7 +222,7 @@ function ComposeBtn() {
if (
!handle ||
handle === currentAccount?.handle ||
- handle === 'handle.invalid'
+ isInvalidHandle(handle)
)
return undefined