diff --git a/app/containers/MessageComposer/__snapshots__/MessageComposer.test.tsx.snap b/app/containers/MessageComposer/__snapshots__/MessageComposer.test.tsx.snap
index fbc049a73fe..a30b9bc9d96 100644
--- a/app/containers/MessageComposer/__snapshots__/MessageComposer.test.tsx.snap
+++ b/app/containers/MessageComposer/__snapshots__/MessageComposer.test.tsx.snap
@@ -2482,7 +2482,7 @@ exports[`MessageComposer Toolbar Markdown tap bold 1`] = `
borderless={true}
collapsable={false}
delayLongPress={600}
- handlerTag={45}
+ handlerTag={35}
handlerType="NativeViewGestureHandler"
hitSlop={
{
@@ -3093,7 +3093,7 @@ exports[`MessageComposer Toolbar Markdown tap code 1`] = `
borderless={true}
collapsable={false}
delayLongPress={600}
- handlerTag={123}
+ handlerTag={113}
handlerType="NativeViewGestureHandler"
hitSlop={
{
@@ -3704,7 +3704,7 @@ exports[`MessageComposer Toolbar Markdown tap code-block 1`] = `
borderless={true}
collapsable={false}
delayLongPress={600}
- handlerTag={149}
+ handlerTag={139}
handlerType="NativeViewGestureHandler"
hitSlop={
{
@@ -4315,7 +4315,7 @@ exports[`MessageComposer Toolbar Markdown tap italic 1`] = `
borderless={true}
collapsable={false}
delayLongPress={600}
- handlerTag={71}
+ handlerTag={61}
handlerType="NativeViewGestureHandler"
hitSlop={
{
@@ -5537,7 +5537,7 @@ exports[`MessageComposer Toolbar Markdown tap strike 1`] = `
borderless={true}
collapsable={false}
delayLongPress={600}
- handlerTag={97}
+ handlerTag={87}
handlerType="NativeViewGestureHandler"
hitSlop={
{
@@ -6148,7 +6148,7 @@ exports[`MessageComposer Toolbar Markdown type test and tap bold 1`] = `
borderless={true}
collapsable={false}
delayLongPress={600}
- handlerTag={58}
+ handlerTag={48}
handlerType="NativeViewGestureHandler"
hitSlop={
{
@@ -6759,7 +6759,7 @@ exports[`MessageComposer Toolbar Markdown type test and tap code 1`] = `
borderless={true}
collapsable={false}
delayLongPress={600}
- handlerTag={136}
+ handlerTag={126}
handlerType="NativeViewGestureHandler"
hitSlop={
{
@@ -7370,7 +7370,7 @@ exports[`MessageComposer Toolbar Markdown type test and tap code-block 1`] = `
borderless={true}
collapsable={false}
delayLongPress={600}
- handlerTag={162}
+ handlerTag={152}
handlerType="NativeViewGestureHandler"
hitSlop={
{
@@ -7981,7 +7981,7 @@ exports[`MessageComposer Toolbar Markdown type test and tap italic 1`] = `
borderless={true}
collapsable={false}
delayLongPress={600}
- handlerTag={84}
+ handlerTag={74}
handlerType="NativeViewGestureHandler"
hitSlop={
{
@@ -8592,7 +8592,7 @@ exports[`MessageComposer Toolbar Markdown type test and tap strike 1`] = `
borderless={true}
collapsable={false}
delayLongPress={600}
- handlerTag={110}
+ handlerTag={100}
handlerType="NativeViewGestureHandler"
hitSlop={
{
@@ -9630,77 +9630,76 @@ exports[`MessageComposer Toolbar tap emoji 1`] = `
}
}
>
-
-
-
-
-
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ testID="emoji-picker-tab-clock"
+ >
+
+
+
-
-
-
-
-
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ testID="emoji-picker-tab-emoji"
+ >
+
+
+
-
-
-
-
-
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ testID="emoji-picker-tab-leaf"
+ >
+
+
+
-
-
-
-
-
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ testID="emoji-picker-tab-burger"
+ >
+
+
+
-
-
-
-
-
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ testID="emoji-picker-tab-basketball"
+ >
+
+
+
-
-
-
-
-
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ testID="emoji-picker-tab-airplane"
+ >
+
+
+
-
-
-
-
-
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ testID="emoji-picker-tab-lamp-bulb"
+ >
+
+
+
-
-
-
-
-
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ testID="emoji-picker-tab-percentage"
+ >
+
+
+
-
-
-
-
-
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ testID="emoji-picker-tab-flag"
+ >
+
+
+
-
-
-
-
-
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ testID="emoji-picker-tab-rocket"
+ >
+
+
+
{
}
return (
- setAlsoSendThreadToChannel(!alsoSendThreadToChannel)}
testID='message-composer-send-to-channel'>
@@ -81,7 +81,7 @@ export const SendThreadToChannel = (): React.ReactElement | null => {
color={alsoSendThreadToChannel ? colors.buttonBackgroundPrimaryDefault : colors.fontDefault}
/>
{I18n.t('Message_composer_Send_to_channel')}
-
+
);
};
diff --git a/app/containers/RoomHeader/RoomHeader.tsx b/app/containers/RoomHeader/RoomHeader.tsx
index 35a44f5181f..bcaf4722faf 100644
--- a/app/containers/RoomHeader/RoomHeader.tsx
+++ b/app/containers/RoomHeader/RoomHeader.tsx
@@ -1,7 +1,7 @@
import React from 'react';
import { StyleSheet, Text, useWindowDimensions, View } from 'react-native';
-import { TouchableOpacity } from 'react-native-gesture-handler';
+import TouchableOpacity from '../TouchableOpacity';
import { useResponsiveLayout } from '../../lib/hooks/useResponsiveLayout/useResponsiveLayout';
import I18n from '../../i18n';
import sharedStyles from '../../views/Styles';
diff --git a/app/containers/RoomHeader/__snapshots__/RoomHeader.test.tsx.snap b/app/containers/RoomHeader/__snapshots__/RoomHeader.test.tsx.snap
index 65bed9d5439..ce0c3f60079 100644
--- a/app/containers/RoomHeader/__snapshots__/RoomHeader.test.tsx.snap
+++ b/app/containers/RoomHeader/__snapshots__/RoomHeader.test.tsx.snap
@@ -28,13 +28,27 @@ exports[`Story Snapshots: Icons should match snapshot 1`] = `
]
}
>
-
-
-
-
-
-
- private channel
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ >
+
+
+
+ private channel
+
-
+
,
-
-
-
-
-
-
- public channel
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ >
+
+
+
+ public channel
+
-
+
,
-
-
-
-
-
-
- discussion
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ >
+
+
+
+ discussion
+
-
+
,
-
-
-
-
-
-
- omnichannel
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ >
+
+
+
+ omnichannel
+
-
+
,
-
-
-
-
-
-
- private team
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ >
+
+
+
+ private team
+
-
+
,
-
-
-
-
-
-
- public team
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ >
+
+
+
+ public team
+
-
+
,
-
-
-
-
-
-
- group dm
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ >
+
+
+
+ group dm
+
-
+
,
-
-
-
-
-
-
- online dm
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ >
+
+
+
+ online dm
+
-
+
,
-
-
-
-
-
-
- away dm
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ >
+
+
+
+ away dm
+
-
+
,
-
-
-
-
-
-
- busy dm
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ >
+
+
+
+ busy dm
+
-
+
,
-
-
-
-
-
-
- loading dm
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ >
+
+
+
+ loading dm
+
-
+
,
-
-
-
-
-
-
- offline dm
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ >
+
+
+
+ offline dm
+
-
+
,
-
-
-
-
-
-
- classified
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ >
+
+
+
+ classified
+
-
+
,
-
-
-
-
-
-
- classified
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ >
+
+
+
+ classified
+
-
+
,
]
@@ -1866,13 +1950,27 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = `
]
}
>
-
-
-
-
-
-
- title
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ >
+
+
- subtitle
+ title
-
+
+ subtitle
+
+
,
-
-
-
-
-
-
- title
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ >
+
+
- subtitle
+ title
-
+
+ subtitle
+
+
,
-
-
-
-
-
-
- title
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ >
+
+
- subtitle
+ title
-
+
+ subtitle
+
+
,
]
@@ -2360,13 +2462,27 @@ exports[`Story Snapshots: Thread should match snapshot 1`] = `
]
}
>
-
-
-
- title
-
-
-
+
+
-
+
-
-
-
- parent title
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ >
+
+
+
+ parent title
+
-
+
,
-
-
-
- markdown preview #3 4 5
-
-
-
-
+
+
+
-
-
-
- Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ >
+
+
+
+ Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries
+
-
+
,
]
@@ -2715,13 +2829,27 @@ exports[`Story Snapshots: TitleSubtitle should match snapshot 1`] = `
]
}
>
-
-
-
-
-
-
- title
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ >
+
+
+
+ title
+
-
+
,
-
-
-
-
-
-
- Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ >
+
+
+
+ Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries
+
-
+
,
-
-
-
-
-
-
- title
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ >
+
+
- subtitle
+ title
-
+
+ subtitle
+
+
,
-
-
-
-
-
-
- title
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ >
+
+
- Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries
+ title
-
+
+ Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries
+
+
,
-
-
-
-
-
-
- Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ >
+
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries
-
+
+ Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries
+
+
,
]
@@ -3470,13 +3614,27 @@ exports[`Story Snapshots: Typing should match snapshot 1`] = `
]
}
>
-
-
-
-
-
-
- title
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ >
+
+
-
- user 1
-
-
- is typing
- ...
+ title
-
+
+
+ user 1
+
+
+ is typing
+ ...
+
+
,
-
-
-
-
-
-
- title
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ >
+
+
-
- user 1 and user 2
-
-
- are typing
- ...
+ title
-
+
+
+ user 1 and user 2
+
+
+ are typing
+ ...
+
+
,
-
-
-
-
-
-
- title
-
-
+ ],
+ {
+ "fontFamily": "custom",
+ "fontStyle": "normal",
+ "fontWeight": "normal",
+ },
+ {},
+ ]
+ }
+ >
+
+
-
- user 1, user 2, user 3, user 4, user 5
-
-
- are typing
- ...
+ title
-
+
+
+ user 1, user 2, user 3, user 4, user 5
+
+
+ are typing
+ ...
+
+
,
]
diff --git a/app/containers/TabView/index.tsx b/app/containers/TabView/index.tsx
index 6c6679ce7b4..0d902663445 100644
--- a/app/containers/TabView/index.tsx
+++ b/app/containers/TabView/index.tsx
@@ -1,8 +1,8 @@
import React, { useCallback, useState } from 'react';
import { View } from 'react-native';
import { TabView as ReanimatedTabView, type Route, type NavigationState } from 'reanimated-tab-view';
-import { TouchableOpacity } from 'react-native-gesture-handler';
+import TouchableOpacity from '../TouchableOpacity';
import styles from './styles';
import { useTheme } from '../../theme';
diff --git a/app/containers/TouchableOpacity/index.tsx b/app/containers/TouchableOpacity/index.tsx
new file mode 100644
index 00000000000..719be8eba1a
--- /dev/null
+++ b/app/containers/TouchableOpacity/index.tsx
@@ -0,0 +1,33 @@
+import React from 'react';
+import Animated, { useSharedValue, useAnimatedStyle } from 'react-native-reanimated';
+import { Pressable, type PressableProps, type StyleProp, type ViewStyle } from 'react-native';
+
+const AnimatedPressable = Animated.createAnimatedComponent(Pressable);
+
+interface TouchableOpacityProps extends PressableProps {
+ style?: StyleProp;
+ opacity?: number;
+ activeOpacity?: number;
+}
+
+function TouchableOpacity(props: TouchableOpacityProps): React.JSX.Element {
+ const opacity = useSharedValue(props.opacity || 1);
+ const animatedStyle = useAnimatedStyle(() => ({
+ opacity: opacity.value
+ }));
+
+ const onPressIn = () => {
+ opacity.value = props.activeOpacity || 0.2;
+ };
+ const onPressOut = () => {
+ opacity.value = props.opacity || 1;
+ };
+
+ return (
+
+ {props.children}
+
+ );
+}
+
+export default TouchableOpacity;
diff --git a/app/views/RoomsListView/components/Header.tsx b/app/views/RoomsListView/components/Header.tsx
index 3f6ff738f90..d7f88b23764 100644
--- a/app/views/RoomsListView/components/Header.tsx
+++ b/app/views/RoomsListView/components/Header.tsx
@@ -1,6 +1,5 @@
import React, { memo } from 'react';
import { StyleSheet, Text, View, useWindowDimensions } from 'react-native';
-import { TouchableOpacity } from 'react-native-gesture-handler';
import { showActionSheetRef } from '../../../containers/ActionSheet';
import SearchHeader from '../../../containers/SearchHeader';
@@ -9,6 +8,7 @@ import { useAppSelector } from '../../../lib/hooks/useAppSelector';
import { useTheme } from '../../../theme';
import sharedStyles from '../../Styles';
import ServersList from './ServersList';
+import TouchableOpacity from '../../../containers/TouchableOpacity';
const styles = StyleSheet.create({
container: {