@momo-kits/foundation 0.162.3-fontscale.1 → 0.162.3-rn.86.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Application/BottomSheet.tsx +2 -2
- package/Application/ModalScreen.tsx +2 -2
- package/Application/NavigationContainer.tsx +16 -18
- package/Application/ScaleSizeProvider.tsx +1 -0
- package/Application/StackScreen.tsx +1 -0
- package/Application/WidgetContainer.tsx +9 -6
- package/Context/index.ts +1 -0
- package/Divider/index.tsx +3 -3
- package/IconButton/index.tsx +28 -6
- package/IconButton/styles.ts +15 -7
- package/Image/index.tsx +46 -1
- package/Layout/Screen.tsx +6 -13
- package/Text/utils.ts +6 -3
- package/package.json +21 -17
|
@@ -255,7 +255,7 @@ const BottomSheet: React.FC<BottomSheetParams> = props => {
|
|
|
255
255
|
onRequestClose={() => {
|
|
256
256
|
onDismiss();
|
|
257
257
|
}}
|
|
258
|
-
style={StyleSheet.
|
|
258
|
+
style={StyleSheet.absoluteFill}
|
|
259
259
|
isModalKit={true}
|
|
260
260
|
>
|
|
261
261
|
<KeyboardAvoidingView
|
|
@@ -269,7 +269,7 @@ const BottomSheet: React.FC<BottomSheetParams> = props => {
|
|
|
269
269
|
style={styles.container}
|
|
270
270
|
>
|
|
271
271
|
<Pressable
|
|
272
|
-
style={StyleSheet.
|
|
272
|
+
style={StyleSheet.absoluteFill}
|
|
273
273
|
onPress={() => {
|
|
274
274
|
action.current = 'touch';
|
|
275
275
|
onDismiss();
|
|
@@ -128,7 +128,7 @@ const Modal: React.FC<ModalParams> = props => {
|
|
|
128
128
|
transparent
|
|
129
129
|
visible={true}
|
|
130
130
|
onRequestClose={onDismiss}
|
|
131
|
-
style={StyleSheet.
|
|
131
|
+
style={StyleSheet.absoluteFill}
|
|
132
132
|
isModalKit={true}
|
|
133
133
|
>
|
|
134
134
|
<KeyboardAvoidingView
|
|
@@ -136,7 +136,7 @@ const Modal: React.FC<ModalParams> = props => {
|
|
|
136
136
|
behavior={Platform.OS === 'ios' ? 'padding' : undefined}
|
|
137
137
|
>
|
|
138
138
|
<Pressable
|
|
139
|
-
style={StyleSheet.
|
|
139
|
+
style={StyleSheet.absoluteFill}
|
|
140
140
|
onPress={() => onDismiss(undefined, barrierDismissible)}
|
|
141
141
|
>
|
|
142
142
|
<Animated.View style={[styles.overlayContent, { opacity }]} />
|
|
@@ -16,7 +16,6 @@ import { DeviceEventEmitter } from 'react-native';
|
|
|
16
16
|
import StackScreen from './StackScreen';
|
|
17
17
|
import ModalScreen from './ModalScreen';
|
|
18
18
|
import Navigator from './Navigator';
|
|
19
|
-
import ScaleSizeProvider from './ScaleSizeProvider';
|
|
20
19
|
import { getModalOptions, getStackOptions } from './utils';
|
|
21
20
|
import { NavigationContainerProps } from './types';
|
|
22
21
|
import { ApplicationContext, MiniAppContext } from '../Context';
|
|
@@ -46,6 +45,13 @@ const NavigationContainer: React.FC<NavigationContainerProps> = ({
|
|
|
46
45
|
const context = useContext<any>(MiniAppContext);
|
|
47
46
|
const [currentContext, setCurrentContext] = useState<any>({});
|
|
48
47
|
|
|
48
|
+
useEffect(() => {
|
|
49
|
+
const sub = maxApi?.observer?.('font_scale_config', (data: any) => {
|
|
50
|
+
setCurrentContext((prev: any) => ({ ...prev, fontScale: data }));
|
|
51
|
+
});
|
|
52
|
+
return () => sub?.remove?.();
|
|
53
|
+
}, [maxApi]);
|
|
54
|
+
|
|
49
55
|
const mergedContext = {
|
|
50
56
|
...context,
|
|
51
57
|
...currentContext,
|
|
@@ -58,17 +64,15 @@ const NavigationContainer: React.FC<NavigationContainerProps> = ({
|
|
|
58
64
|
return (
|
|
59
65
|
<SafeAreaProvider>
|
|
60
66
|
<MiniAppContext.Provider value={mergedContext}>
|
|
61
|
-
<
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
/>
|
|
71
|
-
</ScaleSizeProvider>
|
|
67
|
+
<Navigation
|
|
68
|
+
screen={screen}
|
|
69
|
+
theme={theme}
|
|
70
|
+
options={options}
|
|
71
|
+
maxApi={maxApi}
|
|
72
|
+
setCurrentContext={setCurrentContext}
|
|
73
|
+
initialParams={initialParams}
|
|
74
|
+
localize={localize}
|
|
75
|
+
/>
|
|
72
76
|
</MiniAppContext.Provider>
|
|
73
77
|
</SafeAreaProvider>
|
|
74
78
|
);
|
|
@@ -117,12 +121,6 @@ const Navigation: React.FC<any> = ({
|
|
|
117
121
|
},
|
|
118
122
|
);
|
|
119
123
|
|
|
120
|
-
// TEMP: verify FontScale MaxApi end-to-end — remove after test
|
|
121
|
-
// @ts-ignore getFontScale added in newer @momo-platform/api
|
|
122
|
-
maxApi?.getFontScale?.((scale: any) =>
|
|
123
|
-
console.log('[FontScale][momo-kit] getFontScale ->', scale),
|
|
124
|
-
);
|
|
125
|
-
|
|
126
124
|
return () => {
|
|
127
125
|
subscription?.remove?.();
|
|
128
126
|
};
|
|
@@ -2,6 +2,7 @@ import React, { FC } from 'react';
|
|
|
2
2
|
import { ScaleSizeContext } from '../Context';
|
|
3
3
|
import { ScaleSizeProviderProps } from './types';
|
|
4
4
|
|
|
5
|
+
/** @deprecated Max font scale is fixed at 1.5; this provider no longer affects scaling. */
|
|
5
6
|
const ScaleSizeProvider: FC<ScaleSizeProviderProps> = ({
|
|
6
7
|
scaleSizeMaxRate,
|
|
7
8
|
children,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useContext, useRef, useState } from 'react';
|
|
1
|
+
import React, { useContext, useEffect, useRef, useState } from 'react';
|
|
2
2
|
import { SafeAreaProvider } from 'react-native-safe-area-context';
|
|
3
3
|
import Navigator from './Navigator';
|
|
4
4
|
import ScaleSizeProvider from './ScaleSizeProvider';
|
|
@@ -44,6 +44,13 @@ const WidgetContainer: React.FC<WidgetContainerProps> = ({
|
|
|
44
44
|
const navigator = useRef(new Navigator(navigationRef, isReady, true));
|
|
45
45
|
const [currentContext, setCurrentContext] = useState({});
|
|
46
46
|
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
const sub = maxApi?.observer?.('font_scale_config', (data: any) => {
|
|
49
|
+
setCurrentContext((prev: any) => ({ ...prev, fontScale: data }));
|
|
50
|
+
});
|
|
51
|
+
return () => sub?.remove?.();
|
|
52
|
+
}, [maxApi]);
|
|
53
|
+
|
|
47
54
|
let headerBackground = context?.designConfig?.headerBar;
|
|
48
55
|
let headerGradient = theme.colors?.gradient;
|
|
49
56
|
|
|
@@ -74,12 +81,9 @@ const WidgetContainer: React.FC<WidgetContainerProps> = ({
|
|
|
74
81
|
};
|
|
75
82
|
|
|
76
83
|
return (
|
|
77
|
-
<View style={{ height: height ?? '100%', minHeight:1 }}>
|
|
84
|
+
<View style={{ height: height ?? '100%', minHeight: 1 }}>
|
|
78
85
|
<SafeAreaProvider>
|
|
79
86
|
<MiniAppContext.Provider value={mergedContext}>
|
|
80
|
-
<ScaleSizeProvider
|
|
81
|
-
scaleSizeMaxRate={mergedContext?.scaleSizeMaxRate}
|
|
82
|
-
>
|
|
83
87
|
<ApplicationContext.Provider
|
|
84
88
|
value={{
|
|
85
89
|
navigator: navigator.current,
|
|
@@ -157,7 +161,6 @@ const WidgetContainer: React.FC<WidgetContainerProps> = ({
|
|
|
157
161
|
</ReactNavigationContainer>
|
|
158
162
|
</NavigationIndependentTree>
|
|
159
163
|
</ApplicationContext.Provider>
|
|
160
|
-
</ScaleSizeProvider>
|
|
161
164
|
</MiniAppContext.Provider>
|
|
162
165
|
</SafeAreaProvider>
|
|
163
166
|
</View>
|
package/Context/index.ts
CHANGED
|
@@ -9,6 +9,7 @@ const MiniAppContext = (Platform as any).MiniAppContext ?? Context;
|
|
|
9
9
|
const ScreenContext = (Platform as any).ScreenContext ?? Context;
|
|
10
10
|
const ComponentContext = (Platform as any).ComponentContext ?? Context;
|
|
11
11
|
const SkeletonContext = createContext({ loading: false });
|
|
12
|
+
/** @deprecated Max font scale is fixed at 1.5; this context is no longer read. */
|
|
12
13
|
const ScaleSizeContext = createContext<{ scaleSizeMaxRate?: number }>({
|
|
13
14
|
scaleSizeMaxRate: undefined,
|
|
14
15
|
});
|
package/Divider/index.tsx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { useContext } from 'react';
|
|
2
|
-
import { View, ViewStyle } from 'react-native';
|
|
2
|
+
import { StyleProp, View, ViewStyle } from 'react-native';
|
|
3
3
|
import { ApplicationContext } from '../Context';
|
|
4
4
|
import { Spacing } from '../Consts';
|
|
5
5
|
import { DashDivider } from './DashDivider';
|
|
@@ -8,7 +8,7 @@ export interface DividerProps {
|
|
|
8
8
|
/**
|
|
9
9
|
* Custom styles for divider
|
|
10
10
|
*/
|
|
11
|
-
style?: ViewStyle
|
|
11
|
+
style?: StyleProp<ViewStyle>;
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* Enable margin vertical 4px
|
|
@@ -30,13 +30,13 @@ const Divider: React.FC<DividerProps> = ({
|
|
|
30
30
|
return (
|
|
31
31
|
<View
|
|
32
32
|
style={[
|
|
33
|
-
style,
|
|
34
33
|
{
|
|
35
34
|
height: 1,
|
|
36
35
|
width: '100%',
|
|
37
36
|
backgroundColor: theme.colors.border.default,
|
|
38
37
|
marginVertical: useMargin ? Spacing.XS : 0,
|
|
39
38
|
},
|
|
39
|
+
style,
|
|
40
40
|
]}
|
|
41
41
|
/>
|
|
42
42
|
);
|
package/IconButton/index.tsx
CHANGED
|
@@ -28,7 +28,12 @@ export interface IconButtonProps extends TouchableOpacityProps {
|
|
|
28
28
|
/**
|
|
29
29
|
* Optional. Defines the size of the IconButton.
|
|
30
30
|
*/
|
|
31
|
-
size?: 'large' | 'small';
|
|
31
|
+
size?: 'large' | 'medium' | 'small';
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Optional. Defines the shape of the IconButton.
|
|
35
|
+
*/
|
|
36
|
+
shape?: 'circle' | 'square';
|
|
32
37
|
|
|
33
38
|
/**
|
|
34
39
|
* Optional. Params auto tracking component.
|
|
@@ -40,6 +45,7 @@ const IconButton: React.FC<IconButtonProps> = ({
|
|
|
40
45
|
type = 'primary',
|
|
41
46
|
icon,
|
|
42
47
|
size,
|
|
48
|
+
shape = 'circle',
|
|
43
49
|
params,
|
|
44
50
|
...rest
|
|
45
51
|
}) => {
|
|
@@ -52,10 +58,21 @@ const IconButton: React.FC<IconButtonProps> = ({
|
|
|
52
58
|
* get size icon button
|
|
53
59
|
*/
|
|
54
60
|
const getSizeStyle = () => {
|
|
55
|
-
|
|
56
|
-
|
|
61
|
+
switch (size) {
|
|
62
|
+
case 'small':
|
|
63
|
+
return styles.small;
|
|
64
|
+
case 'medium':
|
|
65
|
+
return styles.medium;
|
|
66
|
+
default:
|
|
67
|
+
return styles.large;
|
|
57
68
|
}
|
|
58
|
-
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* get shape icon button
|
|
73
|
+
*/
|
|
74
|
+
const getShapeStyle = () => {
|
|
75
|
+
return shape === 'square' ? styles.square : styles.circle;
|
|
59
76
|
};
|
|
60
77
|
|
|
61
78
|
/**
|
|
@@ -117,8 +134,13 @@ const IconButton: React.FC<IconButtonProps> = ({
|
|
|
117
134
|
};
|
|
118
135
|
|
|
119
136
|
const activeOpacity = type === 'disabled' ? 0.75 : 0.5;
|
|
120
|
-
const buttonStyle = StyleSheet.flatten([
|
|
121
|
-
|
|
137
|
+
const buttonStyle = StyleSheet.flatten([
|
|
138
|
+
getTypeStyle(),
|
|
139
|
+
styles.base,
|
|
140
|
+
getSizeStyle(),
|
|
141
|
+
getShapeStyle(),
|
|
142
|
+
]);
|
|
143
|
+
const iconSize = size === 'small' || size === 'medium' ? 16 : 24;
|
|
122
144
|
|
|
123
145
|
return (
|
|
124
146
|
<ComponentContext.Provider
|
package/IconButton/styles.ts
CHANGED
|
@@ -2,19 +2,27 @@ import { StyleSheet } from 'react-native';
|
|
|
2
2
|
import { Radius, Colors } from '../Consts';
|
|
3
3
|
|
|
4
4
|
export default StyleSheet.create({
|
|
5
|
+
base: {
|
|
6
|
+
justifyContent: 'center',
|
|
7
|
+
alignItems: 'center',
|
|
8
|
+
},
|
|
5
9
|
large: {
|
|
6
10
|
width: 48,
|
|
7
11
|
height: 48,
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
12
|
+
},
|
|
13
|
+
medium: {
|
|
14
|
+
width: 36,
|
|
15
|
+
height: 36,
|
|
11
16
|
},
|
|
12
17
|
small: {
|
|
13
|
-
width:
|
|
14
|
-
height:
|
|
18
|
+
width: 28,
|
|
19
|
+
height: 28,
|
|
20
|
+
},
|
|
21
|
+
circle: {
|
|
15
22
|
borderRadius: Radius.XL,
|
|
16
|
-
|
|
17
|
-
|
|
23
|
+
},
|
|
24
|
+
square: {
|
|
25
|
+
borderRadius: Radius.S,
|
|
18
26
|
},
|
|
19
27
|
debugBaseLine: { borderWidth: 1, borderColor: Colors.green_06 },
|
|
20
28
|
});
|
package/Image/index.tsx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { useContext, useRef, useState } from 'react';
|
|
2
|
-
import { StyleSheet, View } from 'react-native';
|
|
2
|
+
import { Image as RNImage, StyleSheet, View } from 'react-native';
|
|
3
3
|
import FastImage from 'react-native-fast-image';
|
|
4
4
|
import styles from './styles';
|
|
5
5
|
import {
|
|
@@ -23,6 +23,10 @@ export const getImageName = (source: any): string => {
|
|
|
23
23
|
return '';
|
|
24
24
|
};
|
|
25
25
|
|
|
26
|
+
const isDataUriSource = (source: any): boolean => {
|
|
27
|
+
return typeof source?.uri === 'string' && source.uri.startsWith('data:');
|
|
28
|
+
};
|
|
29
|
+
|
|
26
30
|
const Image: React.FC<ImageProps> = ({
|
|
27
31
|
style,
|
|
28
32
|
source,
|
|
@@ -43,6 +47,7 @@ const Image: React.FC<ImageProps> = ({
|
|
|
43
47
|
const [status, setStatus] = useState<Status>('success');
|
|
44
48
|
|
|
45
49
|
const showBaseLineDebug = context?.features?.showBaseLineDebug ?? false;
|
|
50
|
+
const useFastImage = !isDataUriSource(source);
|
|
46
51
|
|
|
47
52
|
let accessibilityLabel: any = `img|${getImageName(source)}`;
|
|
48
53
|
if (component?.componentId) {
|
|
@@ -79,6 +84,46 @@ const Image: React.FC<ImageProps> = ({
|
|
|
79
84
|
return children;
|
|
80
85
|
};
|
|
81
86
|
|
|
87
|
+
if (!useFastImage) {
|
|
88
|
+
return (
|
|
89
|
+
<RNImage
|
|
90
|
+
{...rest}
|
|
91
|
+
{...{
|
|
92
|
+
accessibilityLabel: rest.accessibilityLabel ?? accessibilityLabel,
|
|
93
|
+
}}
|
|
94
|
+
source={source}
|
|
95
|
+
style={[
|
|
96
|
+
styles.container,
|
|
97
|
+
style,
|
|
98
|
+
showBaseLineDebug && styles.debugBaseLine,
|
|
99
|
+
]}
|
|
100
|
+
onLoadStart={() => {
|
|
101
|
+
error.current = false;
|
|
102
|
+
if (status !== 'loading' && loading) {
|
|
103
|
+
setStatus('loading');
|
|
104
|
+
}
|
|
105
|
+
}}
|
|
106
|
+
onLoad={() => {
|
|
107
|
+
error.current = false;
|
|
108
|
+
}}
|
|
109
|
+
onLoadEnd={() => {
|
|
110
|
+
let current: Status = 'success';
|
|
111
|
+
if (error.current) {
|
|
112
|
+
current = 'error';
|
|
113
|
+
}
|
|
114
|
+
setStatus(prevState =>
|
|
115
|
+
prevState !== current ? current : prevState,
|
|
116
|
+
);
|
|
117
|
+
}}
|
|
118
|
+
onError={() => {
|
|
119
|
+
error.current = true;
|
|
120
|
+
}}
|
|
121
|
+
>
|
|
122
|
+
{renderContent()}
|
|
123
|
+
</RNImage>
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
|
|
82
127
|
return (
|
|
83
128
|
<FastImage
|
|
84
129
|
{...rest}
|
package/Layout/Screen.tsx
CHANGED
|
@@ -25,10 +25,7 @@ import {
|
|
|
25
25
|
View,
|
|
26
26
|
ViewProps,
|
|
27
27
|
} from 'react-native';
|
|
28
|
-
import {
|
|
29
|
-
useSharedValue,
|
|
30
|
-
withTiming,
|
|
31
|
-
} from 'react-native-reanimated';
|
|
28
|
+
import { useSharedValue, withTiming } from 'react-native-reanimated';
|
|
32
29
|
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
33
30
|
import { ApplicationContext, ScreenContext } from '../Context';
|
|
34
31
|
import Navigation from '../Application/Navigation';
|
|
@@ -196,7 +193,7 @@ const Screen = forwardRef(
|
|
|
196
193
|
) => {
|
|
197
194
|
const screenRef = useRef<View | ScrollView>(null);
|
|
198
195
|
const { width: widthDevice } = useWindowDimensions();
|
|
199
|
-
const { theme } = useContext(ApplicationContext);
|
|
196
|
+
const { theme, navigator } = useContext(ApplicationContext);
|
|
200
197
|
const screen: any = useContext(ScreenContext);
|
|
201
198
|
const insets = useSafeAreaInsets();
|
|
202
199
|
const heightHeader = useHeaderHeight();
|
|
@@ -235,7 +232,8 @@ const Screen = forwardRef(
|
|
|
235
232
|
}, [customAnimatedValue, internalShared]);
|
|
236
233
|
|
|
237
234
|
const currentTint = useRef<string | undefined>(undefined);
|
|
238
|
-
|
|
235
|
+
|
|
236
|
+
const isTab = !!screen?.bottomTab;
|
|
239
237
|
|
|
240
238
|
let handleScroll;
|
|
241
239
|
let Component: any = View;
|
|
@@ -650,10 +648,7 @@ const Screen = forwardRef(
|
|
|
650
648
|
onScroll={handleScroll}
|
|
651
649
|
onScrollEndDrag={handleScrollEnd}
|
|
652
650
|
scrollEventThrottle={16}
|
|
653
|
-
style={[
|
|
654
|
-
Styles.flex,
|
|
655
|
-
!scrollable && !Footer && !isTab && { paddingBottom: bottomInset },
|
|
656
|
-
]}
|
|
651
|
+
style={[Styles.flex]}
|
|
657
652
|
contentContainerStyle={[
|
|
658
653
|
scrollable && !Footer && !isTab && { paddingBottom: bottomInset },
|
|
659
654
|
scrollViewProps?.contentContainerStyle,
|
|
@@ -669,9 +664,7 @@ const Screen = forwardRef(
|
|
|
669
664
|
<FloatingButton
|
|
670
665
|
{...floatingButtonProps}
|
|
671
666
|
animatedValue={sharedValue}
|
|
672
|
-
bottom={
|
|
673
|
-
Footer || isTab ? 12 : bottomInset + Spacing.S
|
|
674
|
-
}
|
|
667
|
+
bottom={Footer || isTab ? 12 : bottomInset + Spacing.S}
|
|
675
668
|
/>
|
|
676
669
|
</View>
|
|
677
670
|
)}
|
package/Text/utils.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Dimensions, PixelRatio, useWindowDimensions } from 'react-native';
|
|
2
2
|
import { useContext } from 'react';
|
|
3
|
-
import {
|
|
3
|
+
import { MiniAppContext } from '../Context';
|
|
4
4
|
|
|
5
5
|
const deviceWidth = Dimensions.get('window').width;
|
|
6
6
|
const DEFAULT_SCREEN_SIZE = 375;
|
|
@@ -8,12 +8,15 @@ const MAX_FONT_SCALE = 1.5;
|
|
|
8
8
|
const MAX_DEVICE_SCALE = 5;
|
|
9
9
|
|
|
10
10
|
const useScaleSize = (size: number, scaleRate?: number) => {
|
|
11
|
-
const
|
|
11
|
+
const context = useContext<any>(MiniAppContext);
|
|
12
|
+
if (context?.fontScale?.useOSScaleRate === false) {
|
|
13
|
+
return size * (context.fontScale.userScaleRate ?? 1);
|
|
14
|
+
}
|
|
12
15
|
const fontScale = PixelRatio.getFontScale();
|
|
13
16
|
const { width } = useWindowDimensions();
|
|
14
17
|
const deviceScale = width / DEFAULT_SCREEN_SIZE;
|
|
15
18
|
|
|
16
|
-
const maxScaleRate = scaleRate ??
|
|
19
|
+
const maxScaleRate = scaleRate ?? MAX_FONT_SCALE;
|
|
17
20
|
|
|
18
21
|
let fontSizeDeviceScale = size;
|
|
19
22
|
let fontSizeOSScale = size;
|
package/package.json
CHANGED
|
@@ -1,35 +1,39 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@momo-kits/foundation",
|
|
3
|
-
"version": "0.162.3-
|
|
3
|
+
"version": "0.162.3-rn.86.2",
|
|
4
4
|
"description": "React Native Component Kits",
|
|
5
|
-
"main": "index.ts",
|
|
6
|
-
"scripts": {},
|
|
7
5
|
"keywords": [
|
|
8
6
|
"@momo-kits/foundation"
|
|
9
7
|
],
|
|
8
|
+
"license": "MoMo",
|
|
9
|
+
"main": "index.ts",
|
|
10
|
+
"publishConfig": {
|
|
11
|
+
"registry": "https://registry.npmjs.org/"
|
|
12
|
+
},
|
|
13
|
+
"scripts": {},
|
|
10
14
|
"dependencies": {
|
|
11
|
-
"react-native-fast-image": "git+https://oauth2:TGi6oBj-LdzsKpLXQSoH@gitlab.mservice.com.vn/momo-platform/public/react-native-fast-image.git#v8.11.0",
|
|
12
15
|
"@react-navigation/bottom-tabs": "7.4.2",
|
|
13
16
|
"@react-navigation/core": "7.12.1",
|
|
14
17
|
"@react-navigation/elements": "2.5.2",
|
|
15
18
|
"@react-navigation/native": "7.1.14",
|
|
16
19
|
"@react-navigation/routers": "7.4.1",
|
|
17
20
|
"@react-navigation/stack": "7.4.2",
|
|
18
|
-
"react-native-gesture-handler": "2.27.1",
|
|
19
|
-
"react-native-linear-gradient": "git+https://oauth2:TGi6oBj-LdzsKpLXQSoH@gitlab.mservice.com.vn/momo-platform/public/react-native-linear-gradient#v3.0.0",
|
|
20
|
-
"react-native-reanimated": "4.2.2",
|
|
21
|
-
"react-native-safe-area-context": "5.5.2",
|
|
22
21
|
"@shopify/flash-list": "2.1.0",
|
|
23
|
-
"lottie-react-native": "7.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"react-native": "
|
|
22
|
+
"lottie-react-native": "7.3.6",
|
|
23
|
+
"react-native-fast-image": "git+https://oauth2:k_r5y_gV6sX9-TqQxgcd@gitlab.mservice.com.vn/momo-platform/public/react-native-fast-image.git#v8.11.0",
|
|
24
|
+
"react-native-gesture-handler": "2.31.0",
|
|
25
|
+
"react-native-linear-gradient": "git+https://oauth2:k_r5y_gV6sX9-TqQxgcd@gitlab.mservice.com.vn/momo-platform/public/react-native-linear-gradient#v3.0.0",
|
|
26
|
+
"react-native-reanimated": "4.5.3",
|
|
27
|
+
"react-native-safe-area-context": "5.7.0"
|
|
27
28
|
},
|
|
28
29
|
"devDependencies": {
|
|
29
|
-
"@types/color": "3.0.6"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
"registry": "https://registry.npmjs.org/"
|
|
30
|
+
"@types/color": "3.0.6",
|
|
31
|
+
"react-native-reanimated": "4.5.3",
|
|
32
|
+
"react-native-worklets": "0.11.3"
|
|
33
33
|
},
|
|
34
|
-
"
|
|
34
|
+
"peerDependencies": {
|
|
35
|
+
"react-native": "*",
|
|
36
|
+
"react-native-reanimated": ">=4.5.0",
|
|
37
|
+
"react-native-worklets": ">=0.11.0"
|
|
38
|
+
}
|
|
35
39
|
}
|